export default class FileOpr { _file: File | any = null; _defaultChunkSize: number = 1024 * 1024; _minChunkSize: number = 0; _partsNumber: number = 0; constructor (file: File) { this._file = file; if (Math.ceil(file.size / this._defaultChunkSize) <= 1) { this._minChunkSize = 500 * 1024; this._partsNumber = Math.ceil(file.size / this._minChunkSize); } else if (Math.ceil(file.size / this._defaultChunkSize) < 10000) { this._partsNumber = Math.ceil(file.size / this._defaultChunkSize); } else { this._partsNumber = 10000; this._minChunkSize = Math.ceil(this._file.size / 10000); } } _fileSlice (sliceIndex: number) { const partSize = this._minChunkSize === 0 ? this._defaultChunkSize : this._minChunkSize, _start = sliceIndex * partSize, _end = _start + partSize > this._file.size ? this._file.size : _start + partSize; const partBlob = this._file.slice(_start, _end); return { file: partBlob as Blob, partNumber: sliceIndex + 1, partSize: (partBlob as Blob).size }; } getSliceArr (startPartNumber: number, num: number) { const sliceArr: any[] = []; while (sliceArr.length < num) { sliceArr.push(this._fileSlice(startPartNumber + sliceArr.length - 1)); } return sliceArr; } getPartsNumber () { return this._partsNumber; } }