UNPKG

wiz-frameworks

Version:

wizlong react framework

466 lines (399 loc) 19.6 kB
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /** * * @overview oss upload modal * @author mll * @date 2020-4-23 * */ import { utils_tool, component_tool } from '../../tool'; import { get, post, put, _delete } from '../../request'; var requestUrl = { get: get, post: post, put: put, _delete: _delete }; var Session = utils_tool.Session, Storage = utils_tool.Storage; var Wizmessage = component_tool.Wizmessage; import { ossFileUtils } from '../../utils'; import OSS from 'ali-oss'; import AWS from 'aws-sdk'; import moment from 'moment'; var initClient = function initClient() { var uploadWay = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Oss'; var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var client = null; var akId = data.akId, aks = data.aks, stoken = data.stoken; switch (uploadWay) { case 'Oss': client = new OSS({ accessKeyId: Base64.decode(akId), accessKeySecret: Base64.decode(aks), endpoint: constants.env.sys_ali_endpoint, bucket: constants.env.sys_ali_bucket, secure: true, stsToken: stoken }); break; case 'S3': AWS.config = new AWS.Config(); var credentials = { accessKeyId: Base64.decode(akId), secretAccessKey: Base64.decode(aks), sessionToken: stoken, region: constants.env.sys_S3_region, s3ForcePathStyle: true }; AWS.config.update(credentials); AWS.config.endpoint = constants.env.sys_S3_endpoint; AWS.config.sslEnabled = false; AWS.config.s3BucketEndpoint = true; client = new AWS.S3({ params: { Bucket: constants.env.sys_S3_bucket } }); break; default: Wizmessage.error({ content: '获取上传文件凭证失败,请稍后尝试', key: 'oss_upload' }); } return client; }; export default { namespace: 'upload', state: { data: {} }, effects: { /** * 检查凭证时效 */ checkAliOvertime: /*#__PURE__*/regeneratorRuntime.mark(function checkAliOvertime(_ref, _ref2) { var payload = _ref.payload; var call = _ref2.call, put = _ref2.put; var uploadWay, key, r, ali, expiration; return regeneratorRuntime.wrap(function checkAliOvertime$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: uploadWay = constants.env.sys_upload_way || 'Oss'; key = uploadWay === 'S3' ? constants.env.sys_S3_key : constants.env.sys_ali_key; r = false; ali = Session.get(key); expiration = ali && ali['expiration']; if (ali && expiration && !moment(expiration).subtract(5, 'minute').isBefore(moment())) { r = true; } payload['callback'] && payload['callback'](r); case 7: case 'end': return _context.stop(); } } }, checkAliOvertime, this); }), /** * 获取凭证 */ getAliParam: /*#__PURE__*/regeneratorRuntime.mark(function getAliParam(_ref3, _ref4) { var payload = _ref3.payload; var call = _ref4.call, put = _ref4.put; var _payload$uploadWay, uploadWay, key, ali, expiration, client, _ref5, code, msg, data, _client; return regeneratorRuntime.wrap(function getAliParam$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _payload$uploadWay = payload.uploadWay, uploadWay = _payload$uploadWay === undefined ? constants.env.sys_upload_way : _payload$uploadWay; key = uploadWay === 'S3' ? constants.env.sys_S3_key : constants.env.sys_ali_key; ali = Session.get(key); expiration = ali && ali['expiration']; if (!(ali && expiration && !moment(expiration).subtract(5, 'minute').isBefore(moment()))) { _context2.next = 9; break; } client = initClient(uploadWay, ali); payload['success'] && payload['success'](client); _context2.next = 20; break; case 9: if (!network()) { _context2.next = 19; break; } _context2.next = 12; return call(requestUrl.get, constants.urls.kUrlGetFileUploadParam, { roleSessionName: 'admin' }); case 12: _ref5 = _context2.sent; code = _ref5.code; msg = _ref5.msg; data = _ref5.data; if (code === 1) { Session.add(key, data); _client = initClient(uploadWay, data); payload['success'] && payload['success'](_client); } else { Wizmessage.error({ content: msg, key: 'oss_upload' }); } _context2.next = 20; break; case 19: Wizmessage.error({ content: '获取上传文件凭证失败,请稍后尝试', key: 'oss_upload' }); case 20: case 'end': return _context2.stop(); } } }, getAliParam, this); }), /** * 向服务端关联文件 */ linkFile: /*#__PURE__*/regeneratorRuntime.mark(function linkFile(_ref6, _ref7) { var payload = _ref6.payload; var call = _ref7.call, put = _ref7.put; var type, onError, files, url, _ref8, code, msg, data; return regeneratorRuntime.wrap(function linkFile$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: type = payload['type']; onError = payload['onError']; files = payload['params'] && payload['params']['files']; if (network()) { _context3.next = 7; break; } Wizmessage.error({ content: '当前网络不可用,请切换网络', key: 'oss_upload' }); onError && onError(files); return _context3.abrupt('return'); case 7: if (type) { _context3.next = 11; break; } Wizmessage.error({ content: '文件的归档类型必须确定', key: 'oss_upload' }); onError && onError(files); return _context3.abrupt('return'); case 11: url = constants.urls.kUrlAddUploadTempFileInfo; if (type === 'courseWare') { url = constants.urls.kUrlAddUploadCourseWareFileInfo; } else if (type === 'system') { url = constants.urls.kUrlAddUploadSystemFileInfo; } else if (type === 'homework') { url = constants.urls.kUrlAddUploadHomeworkFileInfo; } _context3.next = 15; return call(requestUrl.post, url, _extends({}, payload['params']), { headers: { 'content-type': 'application/json', 'access-token': Storage.getStorage("token") } }); case 15: _ref8 = _context3.sent; code = _ref8.code; msg = _ref8.msg; data = _ref8.data; if (!(code === 1)) { _context3.next = 23; break; } payload['success'] && payload['success'](data['files']); _context3.next = 26; break; case 23: Wizmessage.error({ content: msg, key: 'oss_upload' }); onError && onError(files); return _context3.abrupt('return'); case 26: case 'end': return _context3.stop(); } } }, linkFile, this); }), /** * 服务端归档 */ backUp: /*#__PURE__*/regeneratorRuntime.mark(function backUp(_ref9, _ref10) { var payload = _ref9.payload; var call = _ref10.call, put = _ref10.put; var _ref11, code, msg, data; return regeneratorRuntime.wrap(function backUp$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: if (network()) { _context4.next = 4; break; } onError && onError(); Wizmessage.error({ content: '当前网络不可用,请切换网络', key: 'oss_upload' }); return _context4.abrupt('return'); case 4: _context4.next = 6; return call(requestUrl.post, constants.urls.kUrlUploadFileUpdateCmd, _extends({}, payload['params']), { headers: { 'content-type': 'application/json', 'access-token': Storage.getStorage("token") } }); case 6: _ref11 = _context4.sent; code = _ref11.code; msg = _ref11.msg; data = _ref11.data; payload['success'] && payload['success'](code === 1 ? data : undefined); case 11: case 'end': return _context4.stop(); } } }, backUp, this); }), /** * 普通文件上传的结果回调 */ uploadResult: /*#__PURE__*/regeneratorRuntime.mark(function uploadResult(_ref12, _ref13) { var payload = _ref12.payload; var call = _ref13.call, put = _ref13.put; var tasks, urlMap, success, successFiles, errorCount, total, iCount, i; return regeneratorRuntime.wrap(function uploadResult$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: tasks = payload.tasks, urlMap = payload.urlMap, success = payload.success; successFiles = []; errorCount = 0; Promise.all(tasks).then(function (result) { var r = result[0]; if (r && r['res'] && r['res']['status'] === 200) { var _sFile = _extends({}, urlMap.get(r['name'])); var _url = ossFileUtils.getOssUrlBySuffix(_sFile['url']); _sFile['sysUrl'] = _sFile['url']; _sFile['url'] = _url; _sFile['thumbUrl'] = _url; _sFile['status'] = 'done'; _sFile['percent'] = 100; _sFile['name'] = _sFile['fileOriginalName']; successFiles.push(_sFile); } else { errorCount++; } })['catch'](function (err) { errorCount++; }); total = tasks.length; iCount = 0; i = setInterval(function () { iCount++; var _total = successFiles.length + errorCount; if (_total === total) { success && success(successFiles); clearInterval(i); } else if (iCount > 8) { success && success(successFiles); clearInterval(i); } }, 1500); case 7: case 'end': return _context5.stop(); } } }, uploadResult, this); }), /** * 分片上传 */ multipartUpload: /*#__PURE__*/regeneratorRuntime.mark(function multipartUpload(_ref14, _ref15) { var payload = _ref14.payload; var call = _ref15.call, put = _ref15.put; var onProgress, onError, onSuccess, ossClient, file, fileName; return regeneratorRuntime.wrap(function multipartUpload$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: onProgress = payload.onProgress, onError = payload.onError, onSuccess = payload.onSuccess, ossClient = payload.ossClient, file = payload.file, fileName = payload.fileName; ossClient.multipartUpload(fileName, file, { progress: function progress(percentage, checkpoint, res) { onProgress && onProgress(percentage, checkpoint, res); }, partSize: constants.env.sys_ali_partSize }).then(function (result) { onSuccess && onSuccess(result); })['catch'](function (err) { onError && onError(err); }); case 2: case 'end': return _context6.stop(); } } }, multipartUpload, this); }), /** * 断点续传 */ breakpoint: /*#__PURE__*/regeneratorRuntime.mark(function breakpoint(_ref16, _ref17) { var payload = _ref16.payload; var call = _ref17.call, put = _ref17.put; var checkpoint, onProgress, onError, onSuccess, ossClient; return regeneratorRuntime.wrap(function breakpoint$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: checkpoint = payload.checkpoint, onProgress = payload.onProgress, onError = payload.onError, onSuccess = payload.onSuccess, ossClient = payload.ossClient; ossClient.multipartUpload(checkpoint.name, checkpoint.file, { progress: function progress(percentage, checkpoint, res) { onProgress && onProgress(percentage, checkpoint, res); }, partSize: constants.env.sys_ali_partSize }).then(function (result) { onSuccess && onSuccess(result); })['catch'](function (err) { onError && onError(err); }); case 2: case 'end': return _context7.stop(); } } }, breakpoint, this); }), getFileInfo: /*#__PURE__*/regeneratorRuntime.mark(function getFileInfo(_ref18, _ref19) { var payload = _ref18.payload; var call = _ref19.call, put = _ref19.put; var onSuccess, params, _ref20, code, msg, data; return regeneratorRuntime.wrap(function getFileInfo$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: onSuccess = payload.onSuccess, params = payload.params; _context8.next = 3; return call(requestUrl.get, constants.urls.kUrlGetFileInfoByIds, { fileIds: params['fileIds'] }); case 3: _ref20 = _context8.sent; code = _ref20.code; msg = _ref20.msg; data = _ref20.data; if (code === 1) { payload['success'] && payload['success'](data); } else { payload['error'] && payload['error'](msg); Wizmessage.error({ content: msg, key: 'getFileInfo' }); } case 8: case 'end': return _context8.stop(); } } }, getFileInfo, this); }) }, reducers: {} };