js-uploader
Version:
A JavaScript library for file upload
159 lines • 7.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TaskHandler = void 0;
var tslib_1 = require("tslib");
var rxjs_1 = require("rxjs");
var interface_1 = require("../../interface");
var helpers_1 = require("../helpers");
var operators_1 = require("rxjs/operators");
var modules_1 = require("../modules");
var Base_1 = require("../Base");
var shared_1 = require("../../shared");
var TaskHandler = /** @class */ (function (_super) {
tslib_1.__extends(TaskHandler, _super);
function TaskHandler(task, uploaderOptions) {
var _this = _super.call(this, uploaderOptions.id) || this;
_this.task = task;
_this.uploaderOptions = uploaderOptions;
return _this;
}
TaskHandler.prototype.computeFileHash = function (file) {
return new rxjs_1.Observable(function (ob) {
var sparkMd5 = new SparkMD5.ArrayBuffer();
var fileReader;
var calc = function (data) {
sparkMd5.append(data);
var md5 = sparkMd5.end();
ob.next(md5);
ob.complete();
};
if (file instanceof ArrayBuffer) {
calc(file);
}
else {
fileReader = new FileReader();
fileReader.readAsArrayBuffer(file);
fileReader.onload = function (e) {
var _a;
calc((_a = e === null || e === void 0 ? void 0 : e.target) === null || _a === void 0 ? void 0 : _a.result);
};
fileReader.onerror = function (e) {
ob.error(e);
};
}
return function () {
fileReader === null || fileReader === void 0 ? void 0 : fileReader.abort();
sparkMd5.destroy();
};
});
};
TaskHandler.prototype.computeFileMd5ByWorker = function (data) {
var _this = this;
return new rxjs_1.Observable(function (ob) {
var result;
var sub;
if (data instanceof Blob) {
sub = rxjs_1.from((result = shared_1.md5WorkerPool.execute(data).promise)).subscribe(ob);
}
else {
sub = _this.readFile(data)
.pipe(operators_1.switchMap(function (data) { return rxjs_1.from((result = shared_1.md5WorkerPool.execute(data)).promise); }))
.subscribe(ob);
}
return function () {
var _a;
(_a = result === null || result === void 0 ? void 0 : result.abort) === null || _a === void 0 ? void 0 : _a.call(result);
sub === null || sub === void 0 ? void 0 : sub.unsubscribe();
sub = null;
};
});
};
TaskHandler.prototype.toFormData = function (params) {
var formData = new FormData();
Object.keys(params).forEach(function (k) { return formData.append(k, params[k]); });
return formData;
};
TaskHandler.prototype.getServerURL = function (uploadfile, chunk) {
return this.createObserverble(this.uploaderOptions.requestOptions.url, this.task, uploadfile, chunk);
};
TaskHandler.prototype.getRequestMethod = function (uploadfile, chunk) {
return this.createObserverble(this.uploaderOptions.requestOptions.method, this.task, uploadfile, chunk);
};
TaskHandler.prototype.getResponseType = function (uploadfile, chunk) {
return this.createObserverble(this.uploaderOptions.requestOptions.responseType, this.task, uploadfile, chunk);
};
TaskHandler.prototype.getRequestHeaders = function (uploadfile, chunk) {
return this.createObserverble(this.uploaderOptions.requestOptions.headers, this.task, uploadfile, chunk);
};
TaskHandler.prototype.getRequestParams = function (uploadfile, chunk, baseParams) {
return this.createObserverble(this.uploaderOptions.requestOptions.body, this.task, uploadfile, chunk, baseParams);
};
TaskHandler.prototype.getUploadFileByID = function (id) {
var _this = this;
return new rxjs_1.Observable(function (ob) {
var uploadFile = modules_1.FileStore.get(id);
var file$;
if (uploadFile) {
file$ = rxjs_1.of(uploadFile);
}
else {
file$ = modules_1.getStorage(_this.uploaderOptions.id)
.UploadFile.getItem(id)
.pipe(operators_1.concatMap(function (upfile) {
if (!upfile) {
return rxjs_1.of(null);
}
var source = [];
var chunkIDList = upfile.chunkIDList, chunkList = upfile.chunkList;
if (chunkIDList && chunkIDList.length && (!chunkList || chunkList.length !== chunkIDList.length)) {
source.push(modules_1.getStorage(_this.uploaderOptions.id)
.FileChunk.getItems(chunkIDList)
.pipe(operators_1.map(function (res) { return Object.values(res); }), operators_1.tap(function (chunkList) {
upfile.chunkList = chunkList.filter(function (ck) {
if (ck) {
ck.status = ck.status === interface_1.StatusCode.Complete ? ck.status : interface_1.StatusCode.Pause;
}
return !!ck;
});
})));
}
if (!upfile.raw) {
source.push(modules_1.getStorage(_this.uploaderOptions.id)
.BinaryLike.getItem(upfile.id)
.pipe(operators_1.tap(function (blob) {
upfile.raw = blob instanceof Blob ? blob : upfile.raw;
})));
}
upfile.status = upfile.status === interface_1.StatusCode.Complete ? upfile.status : interface_1.StatusCode.Pause;
upfile.progress = upfile.status === interface_1.StatusCode.Complete ? 100 : upfile.progress;
return source.length ? rxjs_1.forkJoin(source).pipe(operators_1.mapTo(upfile)) : rxjs_1.of(upfile);
}), operators_1.tap(function (upfile) {
upfile && modules_1.FileStore.add(upfile);
}));
}
var sub = file$.subscribe(ob);
return function () { return sub.unsubscribe(); };
});
};
TaskHandler.prototype.readFile = function (uploadfile, start, end) {
var _this = this;
return new rxjs_1.Observable(function (ob) {
var reader = _this.uploaderOptions.readFileFn;
var res;
if (typeof reader === 'function') {
res = reader(_this.task, uploadfile, start, end);
}
else {
res = helpers_1.fileReader(uploadfile, start, end);
}
var sub = _this.toObserverble(res).subscribe(ob);
return function () { return sub.unsubscribe(); };
});
};
TaskHandler.prototype.isResumable = function () {
return !!this.uploaderOptions.resumable;
};
return TaskHandler;
}(Base_1.default));
exports.TaskHandler = TaskHandler;
//# sourceMappingURL=TaskHandler.js.map