class Upload { constructor() { this.xhr = new XMLHttpRequest(); this.formData = new FormData(); } then = (callback) => { this.xhr.onload = () => callback({ respInfo: this.xhr }); this.xhr.send(this.formData); } catch = (callback) => { this.xhr.onerror = callback; } uploadProgress = (callback) => { this.xhr.upload.onprogress = ({ total, loaded }) => callback(loaded, total); } cancel = () => { this.xhr.abort(); return Promise.resolve(); } } class FileUpload { fetch = (method, url, headers, data) => { const upload = new Upload(); upload.xhr.open(method, url); Object.keys(headers).forEach((key) => { upload.xhr.setRequestHeader(key, headers[key]); }); data.forEach((item) => { if (item.uri) { upload.formData.append(item.name, { uri: item.uri, type: item.type, name: item.filename }); } else { upload.formData.append(item.name, item.data); } }); return upload; } } const fileUpload = new FileUpload(); export default fileUpload;