UNPKG

wiz-frameworks

Version:

wizlong react framework

1,164 lines (1,029 loc) 46.5 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; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * WizOssUpload * @description oss上传 * @author mll * @date 2020-04-01 */ import React from 'react'; import { connect } from 'dva'; import { Upload } from 'antd'; import 'antd/es/style/themes/default.less'; import { component_tool, utils_tool } from '../../tool'; import { Base64 } from 'js-base64'; import { getCustomDirByType } from './utils'; import { WizContainer } from '../WizContainer'; var WizButton = component_tool.WizButton, Wizmessage = component_tool.Wizmessage, WizModal = component_tool.WizModal, WizSpin = component_tool.WizSpin; var Session = utils_tool.Session, isType = utils_tool.isType; import { ossFileUtils } from '../../utils'; export var isIE = function isIE() { return !!window.ActiveXObject || "ActiveXObject" in window; }; var S3_MIN_PART_SIZE = 5 * 1024 * 1024; //S3上传要求除最后一片分片,其余分片至少不小于5MB var WizOssUpload = function (_WizContainer) { _inherits(WizOssUpload, _WizContainer); function WizOssUpload(props) { _classCallCheck(this, WizOssUpload); var _this = _possibleConstructorReturn(this, (WizOssUpload.__proto__ || Object.getPrototypeOf(WizOssUpload)).call(this, props)); _this.componentName = 'WizOssUpload'; _this.progress = {}; _this.onBreakpoint = new Map(); _this._networkListerner = function () { networkListerner && networkListerner(function (e) { if (!e) { _this.setState({ networkResume: true }); } else if (e && _this.state['networkResume']) { _this._getAli([], function (ossClient) { Object.keys(_this.progress).forEach(function (key) { var _this$progress$key = _this.progress[key], file = _this$progress$key.file, checkpoint = _this$progress$key.checkpoint; _this._breakpoint({ file: file, ossClient: ossClient, checkpoint: checkpoint, callback: function callback(e) { e && e.forEach(function (_e) { _this._callbackFiles(_e); }); } }); }); }); } }); }; _this._getAli = function () { var files = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var callback = arguments[1]; _this.doAction({ path: 'upload/getAliParam', payload: { uploadWay: _this.state.uploadWay, success: function success(e) { callback && callback(e); } }, onError: function onError() { var e = files; e && e.forEach(function (_e) { _this._onFileError(_e); }); } }); }; _this._linkFile = function (files, callback) { var _this$props = _this.props, uploadType = _this$props.uploadType, courseNumber = _this$props.courseNumber, version = _this$props.version, courseType = _this$props.courseType, accept = _this$props.accept; var _fs = []; files.forEach(function (file) { var fileType = ''; if (file['type']) { fileType = file['type']; } else if (file['name'] && file['name'].indexOf('.') !== -1) { var type = file['name'].substring(file['name'].lastIndexOf('.')) || ''; if (type) { if (accept) { if (accept.indexOf(type) !== -1) { fileType = type.substring(1); } } else { fileType = type.substring(1); } } } _fs.push({ fileName: file['name'], size: file['size'], fileType: fileType, uid: file['uid'] }); }); var appName = getCustomDirByType(files[0]['type']); var year = new Date().getFullYear(); var month = new Date().getMonth() + 1; if (month.toString().length == 1) { month = "0" + month; } var yearMonth = year + '/' + month; _this.doAction({ path: 'upload/linkFile', payload: { params: { customDir: appName, appName: constants.env.sys_upload_app_name || 'sgm-lms-web', yearMonth: yearMonth, files: _fs, courseNumber: courseNumber, version: version, courseType: courseType }, type: uploadType, success: function success(e) { callback && callback(e); }, onError: function onError(e) { e && e.forEach(function (_e) { _this._onFileError(_e); }); } } }); }; _this._backUp = function (fileIdList, callback) { _this.doAction({ path: 'upload/backUp', payload: { params: { fileIdList: fileIdList }, success: function success(e) { callback && callback(e); } } }); }; _this._uploadResult = function (tasks, urlMap, callback) { _this.doAction({ path: 'upload/uploadResult', payload: { tasks: tasks, urlMap: urlMap, success: function success(e) { callback && callback(e); } } }); }; _this.propsAndStateOnChange = { uploadingFile: _this._uploadingFile.bind(_this), value: _this._value.bind(_this) }; _this._callbackFiles = function (e) { var onChange = _this.props.onChange; var fs = []; if (_this.state.fileList && _this.state.fileList.length) { _this.state.fileList.forEach(function (f) { if (f['uid'] === e['uid']) { fs.push(e); } else { fs.push(f); } }); } else { fs = e; } _this.setState({ fileList: fs }, function () { onChange && onChange(fs); }); }; _this.beforeUpload = function (file) { var beforeUpload = _this.props.beforeUpload; var uploadFile = function uploadFile(f) { _this._uploadFile([f], function (e) { e && e.forEach(function (_e) { _this._callbackFiles(_e); }); }); }; if (beforeUpload) { var r = beforeUpload && beforeUpload(file, function (_file) { _file['uid'] = file['uid']; uploadFile(_file); }, function () { _this._onRemove(file); }); if (r) { uploadFile(file); } } else { uploadFile(file); } return false; }; _this._onChange = function (_ref) { var file = _ref.file, fileList = _ref.fileList, event = _ref.event; if (file['status'] !== 'removed') { _this.setState({ uploadingFile: fileList }); } }; _this._onRemove = function (file) { var _this$props2 = _this.props, onRemove = _this$props2.onRemove, onChange = _this$props2.onChange, protect = _this$props2.protect; var r = true; if (onRemove) { r = onRemove && onRemove(file); } if (r) { if (protect && _this.progress[file['fileId']]) { Wizmessage.error('文件正在上传中, 请等上传完成后进行操作'); return false; } else { _this.removeFileId.push(file['fileId']); } var files = []; _this.state.fileList.forEach(function (f) { if (file['uid'] !== f['uid']) { files.push(f); } }); _this.setState({ fileList: files }, function () { onChange && onChange(files); }); } return true; }; _this._onFileError = function (file) { var files = []; _this.state.fileList.forEach(function (f) { if (file['uid'] === f['uid']) { var _f = _extends({}, f); _f['status'] = 'c'; delete _f['url']; delete _f['thumbUrl']; files.push(_f); } else { files.push(f); } }); _this.setState({ fileList: files }); }; _this._uploadFile = function (files, callback) { var uidMap = new Map(); if (!files || !files.length) { Wizmessage.error({ content: '选择文件错误,请重新选择!', key: 'oss_upload' }); return; } else { files.forEach(function (_v) { uidMap.set(_v['uid'], _v); }); } Wizmessage.info({ content: '开始上传文件,请勿离开页面', key: 'oss_upload', duration: 5 }); _this._linkFile(files, function (f) { var _files = []; if (isType(f, 'Array')) { _files = f; } else { _files.push(f); } _this._getAli(files, function (uploadClient) { var simple = []; var multipart = []; var simpleS3 = []; var multipartS3 = []; _files.forEach(function (_f) { if (_this.checkMultipart(_f)) { if (_this.state.uploadWay === 'S3') { multipartS3.push(_f); } else { multipart.push(_f); } } else { if (_this.state.uploadWay === 'S3') { simpleS3.push(_f); } else { simple.push(_f); } } }); if (simpleS3.length) { _this._uploadingS3({ _files: _files, callback: callback, uidMap: uidMap, S3Client: uploadClient, fileSources: files }); } if (multipartS3.length) { multipartS3.forEach(function (f) { _this._multipartUploadS3({ file: f, callback: callback, S3Client: uploadClient, fileSources: files }); }); } if (simple.length) { _this._uploading({ _files: _files, callback: callback, uidMap: uidMap, ossClient: uploadClient }); } else if (multipart.length) { multipart.forEach(function (m) { _this._multipartUpload({ file: m, callback: callback, uidMap: uidMap, ossClient: uploadClient }); }); } }); }); }; _this.checkMultipart = function (file) { var maxSize = _this.state.uploadWay === 'S3' ? S3_MIN_PART_SIZE : 1 * 1024 * 1024; if (file['size'] > maxSize) { return true; } return false; }; _this._getBlob = function (fileSource, callback) { var reader = new FileReader(); reader.readAsArrayBuffer(fileSource); var blob = null; reader.onload = function (e) { if (typeof e.target.result === 'object') { blob = new Blob([e.target.result]); } else { blob = e.target.result; } callback && callback(blob); }; }; _this._uploadingS3 = function (_ref2) { var _files = _ref2._files, callback = _ref2.callback, uidMap = _ref2.uidMap, S3Client = _ref2.S3Client, fileSources = _ref2.fileSources; var urlMap = new Map(); var successFunc = function successFunc(successList) { var sText = void 0, eText = void 0; var ids = []; successList.forEach(function (_uf) { if (urlMap.has(_uf['sysUrl'])) { if (sText) { sText += '、' + _uf['fileOriginalName']; } else { sText = _uf['fileOriginalName']; } ids.push(_uf['fileId']); urlMap['delete'](_uf['sysUrl']); } }); if (urlMap.size) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = urlMap.values()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var value = _step.value; if (eText) { eText += '、' + value['fileOriginalName']; } else { eText = value['fileOriginalName']; } var eFile = uidMap.get(value['uid']); eFile['status'] = 'error'; successList.push(eFile); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator['return']) { _iterator['return'](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } if (successList.length && ids.length) { _this._backUp(ids, function (e) { if (e) { sText && Wizmessage.success({ content: '\u6587\u4EF6 ' + sText + ' \u4E0A\u4F20\u6210\u529F', key: 'oss_upload' }); eText && Wizmessage.error({ content: '\u6587\u4EF6 ' + eText + ' \u4E0A\u4F20\u5931\u8D25', key: 'oss_upload_error' }); callback && callback(successList); } else { Wizmessage.error({ content: '\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25,\u8BF7\u7A0D\u540E\u5C1D\u8BD5', key: 'oss_upload' }); var failList = []; ids.forEach(function (id) { successList.forEach(function (file) { if (id === file['fileId']) { failList.push(file); } }); }); failList.forEach(function (_failFile) { _this._onFileError(file); }); } }); } }; _files.map(function (_file) { urlMap.set(_file['url'], _file); var fileSource = fileSources.filter(function (file) { return file.uid && file.uid === _file.uid; })[0]; _this._getBlob(fileSource, function (blob) { var params = { Key: _file['url'], Bucket: 'smvic-lds', ContentType: _file.fileType, Body: blob, 'Access-Control-Allow-Credentials': '*', 'ACL': 'public-read' }; S3Client.upload(params, function (err, data) { var successFiles = []; if (!err) { var _sFile = _extends({}, _file); var _url = ossFileUtils.getS3FileById(_file.fileId, _file.fileType); _sFile['sysUrl'] = _sFile['url']; _sFile['url'] = _url; _sFile['thumbUrl'] = _url; _sFile['status'] = 'done'; _sFile['percent'] = 100; _sFile['name'] = _sFile['fileOriginalName']; successFiles.push(_sFile); successFunc(successFiles); } }); }); }); }; _this._multipartUploadS3 = function (_ref3) { var file = _ref3.file, callback = _ref3.callback, S3Client = _ref3.S3Client, fileSources = _ref3.fileSources; var multipartMap = { Parts: [] }; var fileKey = file['url']; var fileSource = fileSources.filter(function (f) { return f.uid && f.uid === file.uid; })[0]; var multipartSuccess = _this._multipartS3OnSuccess; var multipartFail = _this._multipartOnError; _this._getBlob(fileSource, function (blob) { var multipartUploadParams = { Key: fileKey, Bucket: 'smvic-lds', ContentType: file.fileType, 'ACL': 'public-read' }; var startTime = new Date(); S3Client.createMultipartUpload(multipartUploadParams, function (err, data) { if (!err) { // console.log('createMultipartUpload --> ', data) var UploadId = data.UploadId; var totalSize = blob.size; var partSize = Math.max(constants.env.sys_S3_part_size || S3_MIN_PART_SIZE, S3_MIN_PART_SIZE); var partTotal = Math.ceil(totalSize / partSize); var partNumber = 0; var completePartTotal = 0; var completeMultipartUpload = function completeMultipartUpload(doneParams) { S3Client.completeMultipartUpload(doneParams, function (completeErr, completeData) { if (completeErr) { console.log('An error occurred while completing the multipart upload --> ', completeErr); multipartFail(file, callback, completeErr); } else { var delta = (new Date() - startTime) / 1000; console.log('Completed upload in ', delta, ' seconds. ', 'Final upload data --> ', completeData); multipartSuccess(file, ossFileUtils.getS3FileById(file.fileId, file.fileType), callback); } }); }; var uploadPart = function uploadPart(partParams) { var tryNum = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; S3Client.uploadPart(partParams, function (partErr, partData) { if (partErr) { console.log('upload part error:', partErr); if (tryNum < 3) { // console.log('Retrying upload of part: #', partParams.PartNumber) uploadPart(partParams, tryNum + 1); } else { // console.log('Failed uploading part: #', partParams.PartNumber) } return; } var currentNumber = Number(partParams.PartNumber); // console.log('Completed part --> ', currentNumber) // console.log('part data --> ', partData) multipartMap.Parts[currentNumber - 1] = { ETag: partData.ETag, PartNumber: currentNumber }; completePartTotal++; if (partTotal > completePartTotal) return; var doneParams = { Bucket: 'smvic-lds', Key: fileKey, MultipartUpload: multipartMap, UploadId: partParams.UploadId // console.log('Completing upload...') };completeMultipartUpload(doneParams); }); }; for (var start = 0; start < totalSize; start += partSize) { partNumber++; var end = Math.min(start + partSize, totalSize); var partParams = { Body: blob.slice(start, end), Bucket: 'smvic-lds', Key: fileKey, PartNumber: String(partNumber), UploadId: UploadId // console.log('Uploading part: #', partParams.PartNumber, ', Range start:', start) };uploadPart(partParams); } } else { console.log('createMultipartUpload err --> ', err); } }); }); }; _this._multipartS3OnSuccess = function (file, S3Url, callback) { if (_this.removeFileId.indexOf(file['fileId']) !== -1) { return; } var _sFile = _extends({}, file); var url = S3Url; _sFile['sysUrl'] = _sFile['url']; _sFile['url'] = url; _sFile['thumbUrl'] = url; _sFile['status'] = 'done'; _sFile['percent'] = 100; _sFile['name'] = _sFile['fileOriginalName']; _this._backUp([file['fileId']], function (e) { if (e) { Wizmessage.success({ content: '\u6587\u4EF6 ' + _sFile['fileOriginalName'] + ' \u4E0A\u4F20\u6210\u529F', key: 'oss_upload' }); callback && callback([_sFile]); } else { Wizmessage.error({ content: '\u6587\u4EF6' + _sFile['fileOriginalName'] + '\u4E0A\u4F20\u5931\u8D25,\u8BF7\u7A0D\u540E\u5C1D\u8BD5', key: 'oss_upload' }); _this._onFileError(file); } }); }; _this._uploading = function (_ref4) { var _files = _ref4._files, callback = _ref4.callback, uidMap = _ref4.uidMap, ossClient = _ref4.ossClient; var urlMap = new Map(); var tasks = _files.map(function (_file) { urlMap.set(_file['url'], _file); return ossClient.put(_file['url'], uidMap.get(_file['uid'])); }); _this._uploadResult(tasks, urlMap, function (successList) { var sText = void 0, eText = void 0; var ids = []; successList.forEach(function (_uf) { if (urlMap.has(_uf['sysUrl'])) { if (sText) { sText += '、' + _uf['fileOriginalName']; } else { sText = _uf['fileOriginalName']; } ids.push(_uf['fileId']); urlMap['delete'](_uf['sysUrl']); } }); if (urlMap.size) { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = urlMap.values()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var value = _step2.value; if (eText) { eText += '、' + value['fileOriginalName']; } else { eText = value['fileOriginalName']; } var eFile = uidMap.get(value['uid']); eFile['status'] = 'error'; successList.push(eFile); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2['return']) { _iterator2['return'](); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } } if (successList.length && ids.length) { _this._backUp(ids, function (e) { if (e) { sText && Wizmessage.success({ content: '\u6587\u4EF6 ' + sText + ' \u4E0A\u4F20\u6210\u529F', key: 'oss_upload' }); eText && Wizmessage.error({ content: '\u6587\u4EF6 ' + eText + ' \u4E0A\u4F20\u5931\u8D25', key: 'oss_upload_error' }); callback && callback(successList); } else { Wizmessage.error({ content: '\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25,\u8BF7\u7A0D\u540E\u5C1D\u8BD5', key: 'oss_upload' }); var failList = []; ids.forEach(function (id) { successList.forEach(function (file) { if (id === file['fileId']) { failList.push(file); } }); }); failList.forEach(function (_failFile) { _this._onFileError(file); }); } }); } }); }; _this._multipartUpload = function (_ref5) { var file = _ref5.file, callback = _ref5.callback, uidMap = _ref5.uidMap, ossClient = _ref5.ossClient; _this.doAction({ path: 'upload/multipartUpload', payload: { ossClient: ossClient, file: uidMap.get(file['uid']), fileName: file['url'], onProgress: function onProgress(percentage, checkpoint, res) { _this._multipartOnProgress(file, ossClient, callback, { percentage: percentage, checkpoint: checkpoint, res: res }); }, onSuccess: function onSuccess(result) { _this._multipartOnSuccess(file, callback, result); }, onError: function onError(err) { _this._multipartOnError(file, callback, err); } } }); }; _this._breakpoint = function (_ref6) { var file = _ref6.file, ossClient = _ref6.ossClient, checkpoint = _ref6.checkpoint, callback = _ref6.callback; _this.onBreakpoint.set(file['fileId'], checkpoint); _this.doAction({ path: 'upload/breakpoint', payload: { ossClient: ossClient, checkpoint: checkpoint, onProgress: function onProgress(percentage, checkpoint, res) { _this._multipartOnProgress(file, ossClient, callback, { percentage: percentage, checkpoint: checkpoint, res: res }); }, onSuccess: function onSuccess(result) { _this._multipartOnSuccess(file, callback, result, function (fileId) { _this.onBreakpoint['delete'](fileId); }); }, onError: function onError(err) { _this._multipartOnError(file, callback, err); } } }); }; _this._multipartOnProgress = function (file, ossClient, callback, _ref7) { var percentage = _ref7.percentage, checkpoint = _ref7.checkpoint, res = _ref7.res; var _file = _extends({}, file); _file['name'] = file['fileOriginalName']; _file['percent'] = parseInt(percentage * 100); _file['status'] = 'uploading'; _this.progress[file['fileId']] = { file: file, checkpoint: checkpoint }; _this.checkAliOvertime(function (e) { if (_this.removeFileId.indexOf(file['fileId']) === -1) { if (e && res['status'] === 200) { callback && callback([_file]); } else { ossClient.cancel(); _this._getAli(file, function (o) { _this._breakpoint({ file: file, ossClient: o, checkpoint: checkpoint, callback: callback }); }); } } }); }; _this.checkAliOvertime = function (cb) { _this.doAction({ path: 'upload/checkAliOvertime', payload: { callback: function callback(e) { cb && cb(e); } } }); }; _this._multipartOnSuccess = function (file, callback, result, breakpointCallback) { var r = result; if (_this.removeFileId.indexOf(file['fileId']) !== -1) { return; } if (r && r['res'] && r['res']['status'] === 200) { var _sFile = _extends({}, file); 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']; _this._backUp([file['fileId']], function (e) { if (e) { Wizmessage.success({ content: '\u6587\u4EF6 ' + _sFile['fileOriginalName'] + ' \u4E0A\u4F20\u6210\u529F', key: 'oss_upload' }); callback && callback([_sFile]); } else { Wizmessage.error({ content: '\u6587\u4EF6' + _sFile['fileOriginalName'] + '\u4E0A\u4F20\u5931\u8D25,\u8BF7\u7A0D\u540E\u5C1D\u8BD5', key: 'oss_upload' }); _this._onFileError(file); } }); delete _this.progress[file['fileId']]; breakpointCallback && breakpointCallback(file['fileId']); } else { if (breakpointCallback) { breakpointCallback(); Wizmessage.error({ content: '\u6587\u4EF6 ' + file['fileOriginalName'] + ' \u4E0A\u4F20\u5931\u8D25, \u8BF7\u7A0D\u540E\u518D\u8BD5', key: 'oss_upload_error' }); _this._onFileError(file); breakpointCallback && breakpointCallback(file['fileId']); } else { WizModal.confirm({ title: '文件上传失败', content: '\u6587\u4EF6 ' + file['fileOriginalName'] + ' \u4E0A\u4F20\u5931\u8D25, \u662F\u5426\u5C1D\u8BD5\u91CD\u65B0\u4E0A\u4F20?', onOk: function onOk() { _this._getAli([file], function (ossClient) { _this._breakpoint({ file: file, ossClient: ossClient, checkpoint: _this.progress[file['fileId']]['checkpoint'], callback: callback }); }); }, onCancel: function onCancel() { _this._onFileError(file); } }); } } }; _this._multipartOnError = function (file, callback, err) { log.info('oss multipart upload fail:', err); //主动取消的不处理 if (err && err['name'] === 'cancel') { return; } //去除上传队列 if (_this.onBreakpoint.has(file['fileId'])) { _this.onBreakpoint['delete'](file['fileId']); } Wizmessage.error({ content: '\u6587\u4EF6 ' + file['fileOriginalName'] + ' \u4E0A\u4F20\u5931\u8D25, \u8BF7\u7A0D\u540E\u518D\u8BD5', key: 'oss_upload_error' }); _this._onFileError(file); }; var uploadWay = constants.env.sys_upload_way || 'Oss'; if (_this.props.uploadWay) { uploadWay = _this.props.uploadWay; } _this.state = { fileList: _this.props.value ? _this.props.value : [], networkResume: false, loading: false, uploadWay: uploadWay }; _this.removeFileId = []; return _this; } /** * 默认参数 * 支持antd-upload的参数 */ /** * 分片上传 记录分片信息 */ /** * 断点续传 正在断点续传文件的队列 */ _createClass(WizOssUpload, [{ key: 'componentWillMount', value: function componentWillMount() { var _this2 = this; var fileList = this.state.fileList; var fileIds = ''; if (fileList && fileList.length) { this._getAli([], function (ossClient) { fileList.forEach(function (file) { if (file && file['fileId'] && !file['name']) { fileIds += file['fileId'] + ','; } }); if (fileIds.length) { _this2.setState({ loading: true }, function () { _this2.getFileByIds(fileIds, function (data) { var _fileList = []; if (data && data.length) { fileList.forEach(function (file) { var ossFile = void 0; if (file && file['fileId'] && !file['name']) { data.forEach(function (_file) { if (file['fileId'] === _file['fileId']) { ossFile = ossFileUtils.getOssFile(_file.fileId, _file.fileOriginalName, _file.fileMimeType, _file.fileSize, _file.fileUri); ossFile['uid'] = new Date().getTime(); } }); } else { ossFile = _extends({}, file); } _fileList.push(ossFile); }); } _this2.setState({ loading: false, fileList: _fileList }); }); }); } }); } } /** * 根据fileId获取文件内容 */ }, { key: 'getFileByIds', value: function getFileByIds(fileIds, callback) { this.doAction({ path: 'upload/getFileInfo', payload: { params: { fileIds: fileIds }, success: function success(e) { callback && callback(e); } } }); } /** * 网络监控,重连发起断点续传 * upload自带了这个功能,暂时没用上 */ /** * 获取上传凭证 */ /** * 文件上传前在后台创建file实体 */ /** * 文件上传成功后改变后台的file状态 */ /** * 上传文件结果回调 */ }, { key: '_value', value: function _value(nextProps, nextState) { var protect = this.props.protect; if (protect && nextProps['value'].length < this.state.fileList.length && Object.keys(this.progress).length) { Wizmessage.error('文件正在上传中, 请等上传完成后进行操作'); return false; } else { nextState['fileList'] = nextProps['value']; return true; } } }, { key: '_uploadingFile', value: function _uploadingFile(nextProps, nextState) { var uploadingFile = nextState['uploadingFile']; var fileList = nextState['fileList']; var fs = [].concat(_toConsumableArray(fileList)); if (uploadingFile && uploadingFile.length) { uploadingFile.forEach(function (uf) { var flag = false; fileList.forEach(function (f) { if (uf['uid'] === f['uid']) { flag = true; } }); if (!flag) { uf['status'] = 'uploading'; fs.push(uf); } }); } nextState['fileList'] = fs; return true; } /** * 上传文件时,文件状态的改变 */ /** * 文件上传前的回调 */ /** * 文件状态变化 */ /** * 移除文件 */ /** * 文件出错的状态 */ /** * 文件上传(支持多文件、分片上传) */ /** * 检查文件是否需要分片上传 */ /** * 获取Blob对象 * @param {*} fileSource * @param {*} callback */ /** * S3普通文件上传 */ /** * S3分片上传(超过5兆) */ /** * S3分片上传成功回调 */ /** * 普通文件上传 */ /** * 分片上传(超过1兆) */ /** * 断点续传 */ /** * 分片/断点 进度回调 */ /** * 检查ali凭证时效 */ /** * 分片/断点 上传成功回调 */ /** * 分片/断点 上传失败回调 */ }, { key: '_render', value: function _render() { if (isIE()) return null; var _state = this.state, fileList = _state.fileList, loading = _state.loading; if (loading) { return React.createElement(WizSpin, { spinning: loading, tip: '\u6570\u636E\u52A0\u8F7D\u4E2D' }); } else { var children = this.props.children; var upload = _extends({}, this.props, { beforeUpload: this.beforeUpload, fileList: fileList, onChange: this._onChange, onRemove: this._onRemove }); var selectView = children !== undefined ? children : React.createElement( WizButton, null, '\u9009\u62E9\u6587\u4EF6' ); return React.createElement( Upload, upload, selectView ); } } }]); return WizOssUpload; }(WizContainer); WizOssUpload.defaultProps = { /** * 向服务端归档的类型,决定储存空间: * courseWare 课件, ⭐️课件类型需要额外传 课件编号:courseNumber 版本:version 课件类型:courseType * system 系统文件, * temp 临时文件 * homework 作业文件 */ uploadType: 'system', /** * 文件的监听,实时返回文件状态 */ onChange: function onChange() {}, /** * 上传中文件的保护,默认true。当值为true时,正在上传中的文件不允许被删除 */ protect: true }; var mapStateToProps = function mapStateToProps(state, ownProps) { return {}; }; var options = { withRef: true }; export default connect(mapStateToProps, null, null, options)(WizOssUpload);