wiz-frameworks
Version:
wizlong react framework
466 lines (399 loc) • 19.6 kB
JavaScript
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: {}
};