whale-plus
Version:
A Component Library for Vue 3
58 lines (51 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var SparkMD5 = require('spark-md5');
var EventEmitter = require('../../upload-core/EventEmitter.js');
var FileChunk = require('./FileChunk.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var SparkMD5__default = /*#__PURE__*/_interopDefaultLegacy(SparkMD5);
class ChunkSplitor extends EventEmitter.EventEmitter {
constructor(file, chunkSize = 1024 * 1024 * 5) {
super();
this.handleChunkCount = 0;
this.hasSplited = false;
this.file = file;
this.chunkSize = chunkSize;
const chunkCount = Math.ceil(this.file.size / this.chunkSize);
this.chunks = Array.from({ length: chunkCount }).fill(0).map((_, index) => FileChunk.createChunk(this.file, index, this.chunkSize));
}
split() {
if (this.hasSplited) {
return;
}
this.hasSplited = true;
const emitter = new EventEmitter.EventEmitter();
const list = [];
const chunksHanlder = (chunks) => {
this.emit("chunks", chunks);
chunks.forEach((chunk) => {
list.push({
index: chunk.index,
sparkResult: chunk.sparkResult
});
});
this.handleChunkCount += chunks.length;
if (this.handleChunkCount === this.chunks.length) {
emitter.off("chunks", chunksHanlder);
const spark2 = new SparkMD5__default["default"].ArrayBuffer();
list.sort((a, b) => a.index - b.index);
list.forEach((item) => {
spark2.append(item.sparkResult);
});
this.emit("wholeHash", spark2.end());
spark2.destroy();
this.emit("drain");
}
};
emitter.on("chunks", chunksHanlder);
this.calcHash(this.chunks, emitter);
}
}
exports.ChunkSplitor = ChunkSplitor;
//# sourceMappingURL=ChunkSplitor.js.map