@cmstops/pro-compo
Version:
[物料平台文档中心](https://arco.design/docs/material/guide)
109 lines (108 loc) • 3.21 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
var TUS = require("tus-js-client");
var config = require("../config.js");
function _interopNamespace(e) {
if (e && e.__esModule)
return e;
var n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
if (e) {
Object.keys(e).forEach(function(k) {
if (k !== "default") {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function() {
return e[k];
}
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var TUS__namespace = /* @__PURE__ */ _interopNamespace(TUS);
function uploadByTUS(file, progressCallback) {
return new Promise((resolve, reject) => {
const upload = new TUS__namespace.Upload(file, {
...uploadConfig(file),
onBeforeRequest: (req) => {
const xhr = req.getUnderlyingObject();
xhr.withCredentials = true;
},
onError: (error) => {
reject(error);
},
onProgress: (bytesSent, bytesTotal) => {
progressCallback && progressCallback(bytesSent, bytesTotal);
},
onSuccess: () => {
resolve(upload);
}
});
upload.start();
});
}
function uploadConfig(file) {
const fType = getFileType(file);
return {
endpoint: `${config.DEFAULT_UPLOAD_URL}/upload/`,
chunkSize: config.DEFAULT_UPLOAD_CHUNK_SIZE,
retryDelays: [0, 1e3, 3e3, 5e3],
overridePatchMethod: true,
removeFingerprintOnSuccess: true,
metadata: {
filename: file.name,
filetype: fType,
platform: "holly"
}
};
}
function getFileType(file) {
let fType = file.type;
const ext = file.name.length > 4 ? file.name.substring(file.name.length - 4) : ".null";
if (ext.toLocaleLowerCase() === ".mkv")
fType = "video/x-matroska";
if (ext.toLocaleLowerCase() === ".zip")
fType = "application/zip";
if (ext.toLocaleLowerCase() === ".rar")
fType = "application/x-rar";
return fType;
}
class TusUploadTask {
constructor(file, platformKey) {
this.file = file;
this.platformKey = platformKey || "holly";
}
start(callback) {
return new Promise((resolve, reject) => {
const upload = new TUS__namespace.Upload(this.file, {
endpoint: `${config.DEFAULT_UPLOAD_URL}/upload/`,
chunkSize: config.DEFAULT_UPLOAD_CHUNK_SIZE || 5242880,
retryDelays: [0, 1e3, 3e3, 5e3],
overridePatchMethod: true,
removeFingerprintOnSuccess: true,
metadata: {
filename: this.file.name,
filetype: getFileType(this.file),
platform: this.platformKey
},
onBeforeRequest: (req) => {
const xhr = req.getUnderlyingObject();
xhr.withCredentials = true;
},
onProgress: callback,
onSuccess: () => resolve(upload.url),
onError: (error) => reject(error)
});
this.upload = upload;
upload.start();
});
}
abort() {
return this.upload.abort();
}
}
exports.TusUploadTask = TusUploadTask;
exports.uploadByTUS = uploadByTUS;