UNPKG

@cmstops/pro-compo

Version:

[物料平台文档中心](https://arco.design/docs/material/guide)

109 lines (108 loc) 3.21 kB
"use strict"; 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;