ng-devui
Version:
DevUI components based on Angular
118 lines • 16.9 kB
JavaScript
import { UploadStatus } from './file-uploader.types';
export class FileUploader {
constructor(file, uploadOptions) {
this.file = file;
this.uploadOptions = uploadOptions;
this.percentage = 0;
this.file = file;
this.uploadOptions = uploadOptions;
this.status = UploadStatus.preLoad;
}
sendCommonHandle(uploadFiles) {
const { uri, method, headers, authToken, authTokenHeader, additionalParameter, fileFieldName, withCredentials, responseType } = this.uploadOptions;
const authTokenHeader_ = authTokenHeader || 'Authorization';
const fileFieldName_ = fileFieldName || 'file';
this.xhr = new XMLHttpRequest();
this.xhr.open(method || 'POST', uri);
if (withCredentials) {
this.xhr.withCredentials = withCredentials;
}
if (responseType) {
this.xhr.responseType = responseType;
}
if (authToken) {
this.xhr.setRequestHeader(authTokenHeader_, authToken);
}
if (headers) {
Object.keys(headers).forEach((key) => {
this.xhr.setRequestHeader(key, headers[key]);
});
}
this.xhr.upload.onprogress = (e) => {
this.percentage = Math.round((e.loaded * 100) / e.total);
};
const formData = uploadFiles && uploadFiles.length
? this.oneTimeUploadFiles(fileFieldName_, additionalParameter, uploadFiles)
: this.parallelUploadFiles(fileFieldName_, additionalParameter);
this.xhr.send(formData);
this.status = UploadStatus.uploading;
this.xhr.onabort = () => {
this.status = UploadStatus.preLoad;
this.xhr = null;
};
}
sendErrorAndLoadHandle(resolve, reject, isMultiple = false) {
this.xhr.onerror = () => {
this.response = this.xhr.response;
this.status = UploadStatus.failed;
if (isMultiple) {
reject({ file: this.file, response: this.xhr.response, status: UploadStatus.failed });
}
else {
reject({ file: this.file, response: this.xhr.response });
}
};
this.xhr.onload = () => {
if (this.xhr.readyState === 4 && this.xhr.status >= 200 && this.xhr.status < 300) {
this.response = this.xhr.response;
this.status = UploadStatus.uploaded;
if (isMultiple) {
resolve({ file: this.file, response: this.xhr.response, status: UploadStatus.uploaded });
}
else {
resolve({ file: this.file, response: this.xhr.response });
}
}
else {
this.response = this.xhr.response;
this.status = UploadStatus.failed;
if (isMultiple) {
reject({ file: this.file, response: this.xhr.response, status: UploadStatus.failed });
}
else {
reject({ file: this.file, response: this.xhr.response });
}
}
};
}
send(uploadFiles) {
return new Promise((resolve, reject) => {
this.sendCommonHandle(uploadFiles);
this.sendErrorAndLoadHandle(resolve, reject);
});
}
sendMultiple(uploadFiles) {
return new Promise((resolve, reject) => {
this.sendCommonHandle(uploadFiles);
this.sendErrorAndLoadHandle(resolve, reject, true);
});
}
parallelUploadFiles(fileFieldName_, additionalParameter) {
const formData = new FormData();
formData.append(fileFieldName_, this.file, this.file.name);
if (additionalParameter) {
Object.keys(additionalParameter).forEach((key) => {
formData.append(key, additionalParameter[key]);
});
}
return formData;
}
oneTimeUploadFiles(fileFieldName_, additionalParameter, uploadFiles) {
const formData = new FormData();
uploadFiles.forEach((element) => {
formData.append(fileFieldName_, element.file, element.file.name);
if (additionalParameter) {
Object.keys(additionalParameter).forEach((key) => {
formData.append(key, additionalParameter[key]);
});
}
});
return formData;
}
cancel() {
if (this.xhr) {
this.xhr.abort();
}
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11cGxvYWRlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2RldnVpL3VwbG9hZC9maWxlLXVwbG9hZGVyLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckUsTUFBTSxPQUFPLFlBQVk7SUFNdkIsWUFBbUIsSUFBVSxFQUFTLGFBQTZCO1FBQWhELFNBQUksR0FBSixJQUFJLENBQU07UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFGNUQsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUdwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQVk7UUFDbkMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsR0FDM0gsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNyQixNQUFNLGdCQUFnQixHQUFHLGVBQWUsSUFBSSxlQUFlLENBQUM7UUFDNUQsTUFBTSxjQUFjLEdBQUcsYUFBYSxJQUFJLE1BQU0sQ0FBQztRQUUvQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVyQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUM3QyxDQUFDO1FBRUQsSUFBSSxZQUFZLEVB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QixNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7b0JBQ3ZELFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElVcGxvYWRPcHRpb25zLCBVcGxvYWRTdGF0dXMgfSBmcm9tICcuL2ZpbGUtdXBsb2FkZXIudHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgRmlsZVVwbG9hZGVyIHtcbiAgcHJpdmF0ZSB4aHI6IFhNTEh0dHBSZXF1ZXN0O1xuICBwdWJsaWMgc3RhdHVzOiBVcGxvYWRTdGF0dXM7XG4gIHB1YmxpYyByZXNwb25zZTogYW55O1xuICBwdWJsaWMgcGVyY2VudGFnZSA9IDA7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGZpbGU6IEZpbGUsIHB1YmxpYyB1cGxvYWRPcHRpb25zOiBJVXBsb2FkT3B0aW9ucykge1xuICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgdGhpcy51cGxvYWRPcHRpb25zID0gdXBsb2FkT3B0aW9ucztcbiAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZFN0YXR1cy5wcmVMb2FkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZW5kQ29tbW9uSGFuZGxlKHVwbG9hZEZpbGVzPykge1xuICAgIGNvbnN0IHsgdXJpLCBtZXRob2QsIGhlYWRlcnMsIGF1dGhUb2tlbiwgYXV0aFRva2VuSGVhZGVyLCBhZGRpdGlvbmFsUGFyYW1ldGVyLCBmaWxlRmllbGROYW1lLCB3aXRoQ3JlZGVudGlhbHMsIHJlc3BvbnNlVHlwZSB9ID1cbiAgICAgIHRoaXMudXBsb2FkT3B0aW9ucztcbiAgICBjb25zdCBhdXRoVG9rZW5IZWFkZXJfID0gYXV0aFRva2VuSGVhZGVyIHx8ICdBdXRob3JpemF0aW9uJztcbiAgICBjb25zdCBmaWxlRmllbGROYW1lXyA9IGZpbGVGaWVsZE5hbWUgfHwgJ2ZpbGUnO1xuXG4gICAgdGhpcy54aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB0aGlzLnhoci5vcGVuKG1ldGhvZCB8fCAnUE9TVCcsIHVyaSk7XG5cbiAgICBpZiAod2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnhoci53aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlVHlwZSkge1xuICAgICAgdGhpcy54aHIucmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIGlmIChhdXRoVG9rZW4pIHtcbiAgICAgIHRoaXMueGhyLnNldFJlcXVlc3RIZWFkZXIoYXV0aFRva2VuSGVhZGVyXywgYXV0aFRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVycykge1xuICAgICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHRoaXMueGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy54aHIudXBsb2FkLm9ucHJvZ3Jlc3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5wZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgKiAxMDApIC8gZS50b3RhbCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGZvcm1EYXRhID1cbiAgICAgIHVwbG9hZEZpbGVzICYmIHVwbG9hZEZpbGVzLmxlbmd0aFxuICAgICAgICA/IHRoaXMub25lVGltZVVwbG9hZEZpbGVzKGZpbGVGaWVsZE5hbWVfLCBhZGRpdGlvbmFsUGFyYW1ldGVyLCB1cGxvYWRGaWxlcylcbiAgICAgICAgOiB0aGlzLnBhcmFsbGVsVXBsb2FkRmlsZXMoZmlsZUZpZWxkTmFtZV8sIGFkZGl0aW9uYWxQYXJhbWV0ZXIpO1xuXG4gICAgdGhpcy54aHIuc2VuZChmb3JtRGF0YSk7XG4gICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRTdGF0dXMudXBsb2FkaW5nO1xuXG4gICAgdGhpcy54aHIub25hYm9ydCA9ICgpID0+IHtcbiAgICAgIHRoaXMuc3RhdHVzID0gVXBsb2FkU3RhdHVzLnByZUxvYWQ7XG4gICAgICB0aGlzLnhociA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2VuZEVycm9yQW5kTG9hZEhhbmRsZShyZXNvbHZlLCByZWplY3QsIGlzTXVsdGlwbGUgPSBmYWxzZSkge1xuICAgIHRoaXMueGhyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gdGhpcy54aHIucmVzcG9uc2U7XG4gICAgICB0aGlzLnN0YXR1cyA9IFVwbG9hZFN0YXR1cy5mYWlsZWQ7XG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICByZWplY3QoeyBmaWxlOiB0aGlzLmZpbGUsIHJlc3BvbnNlOiB0aGlzLnhoci5yZXNwb25zZSwgc3RhdHVzOiBVcGxvYWRTdGF0dXMuZmFpbGVkIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KHsgZmlsZTogdGhpcy5maWxlLCByZXNwb25zZTogdGhpcy54aHIucmVzcG9uc2UgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMueGhyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnhoci5yZWFkeVN0YXRlID09PSA0ICYmIHRoaXMueGhyLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy54aHIuc3RhdHVzIDwgMzAwKSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSB0aGlzLnhoci5yZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRTdGF0dXMudXBsb2FkZWQ7XG4gICAgICAgIGlmIChpc011bHRpcGxlKSB7XG4gICAgICAgICAgcmVzb2x2ZSh7IGZpbGU6IHRoaXMuZmlsZSwgcmVzcG9uc2U6IHRoaXMueGhyLnJlc3BvbnNlLCBzdGF0dXM6IFVwbG9hZFN0YXR1cy51cGxvYWRlZCB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZTogdGhpcy5maWxlLCByZXNwb25zZTogdGhpcy54aHIucmVzcG9uc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzcG9uc2UgPSB0aGlzLnhoci5yZXNwb25zZTtcbiAgICAgICAgdGhpcy5zdGF0dXMgPSBVcGxvYWRTdGF0dXMuZmFpbGVkO1xuICAgICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICAgIHJlamVjdCh7IGZpbGU6IHRoaXMuZmlsZSwgcmVzcG9uc2U6IHRoaXMueGhyLnJlc3BvbnNlLCBzdGF0dXM6IFVwbG9hZFN0YXR1cy5mYWlsZWQgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KHsgZmlsZTogdGhpcy5maWxlLCByZXNwb25zZTogdGhpcy54aHIucmVzcG9uc2UgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHNlbmQodXBsb2FkRmlsZXM/KTogUHJvbWlzZTx7IGZpbGU6IEZpbGU7IHJlc3BvbnNlOiBhbnkgfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNlbmRDb21tb25IYW5kbGUodXBsb2FkRmlsZXMpO1xuICAgICAgdGhpcy5zZW5kRXJyb3JBbmRMb2FkSGFuZGxlKHJlc29sdmUsIHJlamVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VuZE11bHRpcGxlKHVwbG9hZEZpbGVzPyk6IFByb21pc2U8eyBmaWxlOiBGaWxlOyByZXNwb25zZTogYW55OyBzdGF0dXM6IFVwbG9hZFN0YXR1cyB9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuc2VuZENvbW1vbkhhbmRsZSh1cGxvYWRGaWxlcyk7XG4gICAgICB0aGlzLnNlbmRFcnJvckFuZExvYWRIYW5kbGUocmVzb2x2ZSwgcmVqZWN0LCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJhbGxlbFVwbG9hZEZpbGVzKGZpbGVGaWVsZE5hbWVfLCBhZGRpdGlvbmFsUGFyYW1ldGVyKSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoZmlsZUZpZWxkTmFtZV8sIHRoaXMuZmlsZSwgdGhpcy5maWxlLm5hbWUpO1xuICAgIGlmIChhZGRpdGlvbmFsUGFyYW1ldGVyKSB7XG4gICAgICBPYmplY3Qua2V5cyhhZGRpdGlvbmFsUGFyYW1ldGVyKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBhZGRpdGlvbmFsUGFyYW1ldGVyW2tleV0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBvbmVUaW1lVXBsb2FkRmlsZXMoZmlsZUZpZWxkTmFtZV8sIGFkZGl0aW9uYWxQYXJhbWV0ZXIsIHVwbG9hZEZpbGVzKSB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICB1cGxvYWRGaWxlcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoZmlsZUZpZWxkTmFtZV8sIGVsZW1lbnQuZmlsZSwgZWxlbWVudC5maWxlLm5hbWUpO1xuICAgICAgaWYgKGFkZGl0aW9uYWxQYXJhbWV0ZXIpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoYWRkaXRpb25hbFBhcmFtZXRlcikuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBhZGRpdGlvbmFsUGFyYW1ldGVyW2tleV0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==