js-uploader
Version:
A JavaScript library for file upload
67 lines • 3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.computeMd5 = void 0;
var tslib_1 = require("tslib");
var Logger_1 = require("../shared/Logger");
var schedule_work_1 = require("./schedule-work");
exports.computeMd5 = function (file) {
return new Promise(function (resolve) {
var spark = new SparkMD5.ArrayBuffer();
var currentChunk = 0;
var chunkSize = Math.pow(1024, 2) * 4;
var fileSize = file instanceof ArrayBuffer ? file.byteLength : file.size;
var chunks = Math.ceil(fileSize / chunkSize);
var append = function (data, start, end) {
return new Promise(function (resolve, reject) {
Logger_1.Logger.info('read chunk nr', currentChunk + 1, 'of', chunks);
if (data instanceof ArrayBuffer) {
spark.append(data.slice(start, end));
resolve();
}
else {
var fileReader = new FileReader();
fileReader.onload = function (e) {
var _a;
spark.append((_a = e.target) === null || _a === void 0 ? void 0 : _a.result);
resolve();
};
fileReader.onerror = function (e) {
Logger_1.Logger.warn('oops, something went wrong.', e);
reject(e);
};
}
});
};
var loadNext = function (timeRemaining) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var start, end, md5;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(currentChunk < chunks)) return [3 /*break*/, 2];
start = currentChunk * chunkSize;
end = start + chunkSize >= fileSize ? fileSize : start + chunkSize;
return [4 /*yield*/, append(file, start, end)];
case 1:
_a.sent();
currentChunk++;
if (!timeRemaining || !(timeRemaining === null || timeRemaining === void 0 ? void 0 : timeRemaining())) {
return [3 /*break*/, 2];
}
return [3 /*break*/, 0];
case 2:
if (currentChunk < chunks) {
schedule_work_1.scheduleWork(loadNext);
}
else {
md5 = spark.end();
Logger_1.Logger.info('computed hash', md5);
resolve(md5);
}
return [2 /*return*/];
}
});
}); };
return loadNext();
});
};
//# sourceMappingURL=compute-md5.js.map