js-uploader
Version:
A JavaScript library for file upload
156 lines • 7.12 kB
JavaScript
import { __extends } from "tslib";
import { Observable, of, from, forkJoin } from 'rxjs';
import { StatusCode } from '../../interface';
import { fileReader } from '../helpers';
import { tap, concatMap, mapTo, map, switchMap } from 'rxjs/operators';
import { FileStore, getStorage } from '../modules';
import Base from '../Base';
import { md5WorkerPool } from '../../shared';
var TaskHandler = /** @class */ (function (_super) {
__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 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 Observable(function (ob) {
var result;
var sub;
if (data instanceof Blob) {
sub = from((result = md5WorkerPool.execute(data).promise)).subscribe(ob);
}
else {
sub = _this.readFile(data)
.pipe(switchMap(function (data) { return from((result = 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 Observable(function (ob) {
var uploadFile = FileStore.get(id);
var file$;
if (uploadFile) {
file$ = of(uploadFile);
}
else {
file$ = getStorage(_this.uploaderOptions.id)
.UploadFile.getItem(id)
.pipe(concatMap(function (upfile) {
if (!upfile) {
return of(null);
}
var source = [];
var chunkIDList = upfile.chunkIDList, chunkList = upfile.chunkList;
if (chunkIDList && chunkIDList.length && (!chunkList || chunkList.length !== chunkIDList.length)) {
source.push(getStorage(_this.uploaderOptions.id)
.FileChunk.getItems(chunkIDList)
.pipe(map(function (res) { return Object.values(res); }), tap(function (chunkList) {
upfile.chunkList = chunkList.filter(function (ck) {
if (ck) {
ck.status = ck.status === StatusCode.Complete ? ck.status : StatusCode.Pause;
}
return !!ck;
});
})));
}
if (!upfile.raw) {
source.push(getStorage(_this.uploaderOptions.id)
.BinaryLike.getItem(upfile.id)
.pipe(tap(function (blob) {
upfile.raw = blob instanceof Blob ? blob : upfile.raw;
})));
}
upfile.status = upfile.status === StatusCode.Complete ? upfile.status : StatusCode.Pause;
upfile.progress = upfile.status === StatusCode.Complete ? 100 : upfile.progress;
return source.length ? forkJoin(source).pipe(mapTo(upfile)) : of(upfile);
}), tap(function (upfile) {
upfile && 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 Observable(function (ob) {
var reader = _this.uploaderOptions.readFileFn;
var res;
if (typeof reader === 'function') {
res = reader(_this.task, uploadfile, start, end);
}
else {
res = 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));
export { TaskHandler };
//# sourceMappingURL=TaskHandler.js.map