UNPKG

syber-lowcode-business-materials

Version:
351 lines (343 loc) 11.6 kB
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; import _regeneratorRuntime from "@babel/runtime/regenerator"; import SparkMD5 from 'spark-md5'; var OSS = require('ali-oss'); var UploadHelp = /*#__PURE__*/function () { function UploadHelp(props) { this.putExtra = {}; this.config = { useCdnDomain: true, //是否使用cnd加速 disableStatisticsReport: false, //是否禁用日志报告 // region: qiniu.region.z0, //选择上传域名区域(华东) retryCount: 3, //上传自动重试次数 concurrentRequestLimit: 3, //分片上传的并发请求量 checkByMD5: false //是否开启 MD5 校验 }; this.getTokenUrl = props.platformType === 'platform' ? '/user/common/getUploadToken' : '/space/common/getUploadToken'; this.getDupRemoveFileTokenUrl = props.platformType === 'platform' ? '/user/common/getDupRemoveFileToken' : '/space/common/getDupRemoveFileToken'; this.dir = (props === null || props === void 0 ? void 0 : props.dir) || ''; this.request = props.request; } /** * 被外调用的上传方法 * @param file 文件实例 * @param suffix 文件类型 后缀 * @param successCB 成功的回调 * @param failureCB 失败的回调 * @param loadingCB 上传过程中的回调(留坑待开发) */ var _proto = UploadHelp.prototype; _proto.upload = function upload(file, suffix, successCB, failureCB, loadingCB) { this.getUploadToken(file, suffix, successCB, failureCB, loadingCB); } /** * 被外调用的上传方法 去重版本 * @param file file或blob * @param suffix 文件类型 后缀 * @param successCB 成功的回调 * @param failureCB 失败的回调 * @param loadingCB 上传过程中的回调(留坑待开发) */; _proto.uploadUniq = function uploadUniq(file, suffix, successCB, failureCB, loadingCB) { this.getUploadTokenUniq(file, suffix, successCB, failureCB, loadingCB); } /** * 获取凭证 * @param suffix 后缀 * @param fname 文件名,如果传了这个参数,将寻找阿里云上的文件做替换 */; _proto.getUploadToken = function getUploadToken(file, suffix, successCB, failureCB, loadingCB, fname) { var _this = this; if (!this.request) { failureCB(500, '请求工具不存在'); return; } var param = { suffix: suffix, fname: fname }; var succCB = function succCB(json) { if (json && json.type === 2) { //执行上传(阿里云) _this.doAliUpload(file, json, successCB, failureCB, loadingCB); } else { //获取凭证成功,执行上传(七牛) } }; var failCB = function failCB(code, msg) { failureCB(code, msg); }; console.log('getUploadToken---->', this.getTokenUrl, param); this.request(this.getTokenUrl, { data: param, method: 'post' }).then(function (res) { console.log('获取上传文件的token', res); if (res.code === 200) { succCB(res.data); } else { failCB(res.code, res.message); } })["catch"](function (err) { console.error(err); failCB(500, '获取凭证失败'); }); } /** * 获取凭证,去重版本。(如果文件已经存在,直接返回地址而不是上传凭证) * @param selFile file或blob * @param suffix 后缀 * @param successCB 成功回调 * @param failureCB 失败回调 * @param loadingCB 过程中 */; _proto.getUploadTokenUniq = function getUploadTokenUniq(file, suffix, successCB, failureCB, loadingCB) { var _this2 = this; if (!this.request) { failureCB(500, '请求工具不存在'); return; } //算md5,得把blob转成file var content = file instanceof Blob ? new File([file], 'test', {}) : file; var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; var parseFile = content; var chunkSize = 2097152; // Read in chunks of 2MB var chunks = Math.ceil(parseFile.size / chunkSize); var currentChunk = 0; var spark = new SparkMD5.ArrayBuffer(); var fileReader = new FileReader(); fileReader.onload = function (e) { console.log('read chunk nr', currentChunk + 1, 'of', chunks); spark.append(e.target.result); // Append array buffer currentChunk++; if (currentChunk < chunks) { loadNext(); } else { console.log('finished loading'); //spark.end() var param = { md5: spark.end(), suffix: suffix }; var succCB = function succCB(json) { console.log(json); if (json.type === 2) { //执行上传(阿里云) _this2.doAliUpload(file, json.token, successCB, failureCB, loadingCB); } else { console.log('文件已经存在'); //文件已经存在,直接返回成功 successCB(200, '文件已经存在', { url: json.url }, {}); } }; var failCB = function failCB(code, msg) { failureCB(code, msg); }; _this2.request(_this2.getDupRemoveFileTokenUrl, { data: param, method: 'post' }).then(function (res) { if (res.code === 200) { succCB(res.data); } else { failCB(res.code, res.message); } })["catch"](function (err) { console.error(err); failCB(500, "获取凭证失败"); }); } }; fileReader.onerror = function () { failureCB(500, '解析文件出错'); }; var loadNext = function loadNext() { var start = currentChunk * chunkSize; var end = start + chunkSize >= parseFile.size ? parseFile.size : start + chunkSize; fileReader.readAsArrayBuffer(blobSlice.call(parseFile, start, end)); }; loadNext(); } /** * 使用阿里云上传 * @param file * @param json 请求后台得到的凭证内容{key:'文件名',host:'文件域名',token:'上传token'} * @param successCB 成功的回调 * @param failureCB 失败的回调 * @param loadingCB 上传进度变化的回调 */; _proto.doAliUpload = function doAliUpload(file, json, successCB, failureCB, loadingCB) { var _this3 = this; var client = new OSS({ accessKeyId: json.AccessKeyId, accessKeySecret: json.AccessKeySecret, bucket: json.Bucket, stsToken: json.SecurityToken, region: json.region || json.Region, endpoint: json.endpoint }); var tempCheckpoint = null; client.multipartUpload(this.dir + json.key, file instanceof Blob ? file : new Blob([file]), { progress: function progress(p, checkpoint) { console.log(p); console.log(checkpoint); // 记录断点 var loadMsg = null; if (checkpoint) { tempCheckpoint = checkpoint; loadMsg = { size: checkpoint.fileSize, loaded: Math.floor(checkpoint.fileSize * p), percent: p * 100 }; } else { loadMsg = { size: 100, loaded: 100, percent: 100 }; } loadingCB && loadingCB({ total: loadMsg }); }, mime: file.type || 'image/png' }).then(function (result) { console.log(result); var res = result.res; res.url = json.host + '/' + _this3.dir + json.key; successCB(200, '上传成功', res, {}); })["catch"](function (err) { console.log('上传错误:'); console.log(err); failureCB(err.code, err.message); }); } //通过名称删除多个文件 ; _proto.deleteMultiByFileNames = function deleteMultiByFileNames(fileNameList, successCB, failureCB) { var param = { suffix: 'jpg', fname: 'useForGetDeleteMultiToken' }; var succCB = /*#__PURE__*/function () { var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(json) { var client, result; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: if (!(json && json.type === 2)) { _context.next = 14; break; } //执行删除(阿里云) client = new OSS({ accessKeyId: json.AccessKeyId, accessKeySecret: json.AccessKeySecret, bucket: json.Bucket, region: json.region || json.Region, stsToken: json.SecurityToken, endpoint: json.endpoint }); _context.prev = 2; _context.next = 5; return client.deleteMulti(fileNameList, { quiet: true }); case 5: result = _context.sent; console.log(result); successCB(200, '删除成功', result, {}); _context.next = 14; break; case 10: _context.prev = 10; _context.t0 = _context["catch"](2); console.error(_context.t0); failureCB(500, _context.t0); case 14: case "end": return _context.stop(); } }, _callee, null, [[2, 10]]); })); return function succCB(_x) { return _ref.apply(this, arguments); }; }(); var failCB = function failCB(code, msg) { failureCB(code, msg); }; this.request(this.getTokenUrl, { data: param, method: 'post' }).then(function (res) { console.log('获取上传文件的token', res); if (res.code === 200) { succCB(res.data); } else { failCB(res.code, res.message); } })["catch"](function (err) { console.error(err); failCB(500, '获取凭证失败'); }); } //复制文件 到新的存储地址 ; _proto.copyFile = function copyFile(copyFileName, fileName) { var _this4 = this; return new Promise(function (resolve, reject) { var param = { suffix: 'png', fname: 'useForDoCopyFileToken' }; var succCB = function succCB(json) { if (json && json.type === 2) { var client = new OSS({ accessKeyId: json.AccessKeyId, accessKeySecret: json.AccessKeySecret, bucket: json.Bucket, stsToken: json.SecurityToken, region: json.region || json.Region, endpoint: json.endpoint }); client.copy(copyFileName, fileName).then(function (r) { // console.log("复制完成") // console.log(r.res.status) if (r.res.status === 200) { resolve(copyFileName); } else { reject('复制失败'); } }); } }; var failCB = function failCB(code, msg) { reject(msg); }; _this4.request(_this4.getTokenUrl, { data: param, method: 'post' }).then(function (res) { console.log('获取上传文件的token', res); if (res.code === 200) { succCB(res.data); } else { failCB(res.code, res.message); } })["catch"](function (err) { console.error(err); failCB(500, '获取凭证失败'); }); }); }; return UploadHelp; }(); export default UploadHelp;