UNPKG

whale-plus

Version:

A Component Library for Vue 3

58 lines (51 loc) 1.88 kB
'use strict'; 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