oss-upload.js
Version:
The browser directly uploads files to oss
56 lines (44 loc) • 1.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.fileMd5 = fileMd5;
exports.stopMd5 = stopMd5;
var _sparkMd = _interopRequireDefault(require("spark-md5"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var aborted = false;
function fileMd5(file, md5Fn, progressFn) {
var progress = 0;
var currentChunk = 0;
var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
var chunkSize = 2097152;
var chunks = Math.ceil(file.size / chunkSize);
var spark = new _sparkMd.default.ArrayBuffer();
var reader = new FileReader();
loadNext();
reader.onloadend = function (e) {
spark.append(e.target.result); // Append array buffer
currentChunk++;
progress = currentChunk / chunks;
if (progressFn && typeof progressFn === 'function') {
progressFn(progress);
}
if (aborted) {
md5Fn('aborted');
return;
}
if (currentChunk < chunks) {
loadNext();
} else {
md5Fn(null, spark.end());
}
};
function loadNext() {
var start = currentChunk * chunkSize;
var end = start + chunkSize >= file.size ? file.size : start + chunkSize;
reader.readAsArrayBuffer(blobSlice.call(file, start, end));
}
}
function stopMd5() {
aborted = true;
}