syber-lowcode-business-materials
Version:
syber-lowcode-business-materials
351 lines (343 loc) • 11.6 kB
JavaScript
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;