|
@@ -1,7 +1,8 @@
|
|
|
|
+/* eslint-disable prefer-template,no-param-reassign */
|
|
import React, { Component } from 'react';
|
|
import React, { Component } from 'react';
|
|
import { Upload, Icon, message, Modal } from 'antd';
|
|
import { Upload, Icon, message, Modal } from 'antd';
|
|
import { queryOssSignature } from '../../services/resource';
|
|
import { queryOssSignature } from '../../services/resource';
|
|
-import { fileMaxSize } from '../../utils/config';
|
|
|
|
|
|
+import { FILE_MAX_SIZE } from '../../utils/config';
|
|
import { setSignature } from '../../utils/signature';
|
|
import { setSignature } from '../../utils/signature';
|
|
import styles from './index.less';
|
|
import styles from './index.less';
|
|
|
|
|
|
@@ -23,14 +24,28 @@ const renderAccept = (accept) => {
|
|
|
|
|
|
// 检查文件大小
|
|
// 检查文件大小
|
|
const checkFileSize = (fileName, fileSize) => {
|
|
const checkFileSize = (fileName, fileSize) => {
|
|
- if (fileSize > fileMaxSize * 1000 * 1000) {
|
|
|
|
- Message.error(`${fileName}文件大小超过${fileSize}M!`);
|
|
|
|
|
|
+ if (fileSize > FILE_MAX_SIZE * 1000 * 1000) {
|
|
|
|
+ Message.error(`${fileName}文件大小超过${FILE_MAX_SIZE}M!`);
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
};
|
|
};
|
|
|
|
|
|
/**
|
|
/**
|
|
|
|
+ * 使用时间戳生成随机的文件名
|
|
|
|
+ * @param fileName
|
|
|
|
+ * @param fileCode
|
|
|
|
+ * @returns {string}
|
|
|
|
+ */
|
|
|
|
+const getRandomFileName = (fileName, fileCode) => {
|
|
|
|
+ const relativePath = fileCode ? fileCode.replace(/-/g, '/') + '/' : '';
|
|
|
|
+ const separatorIndex = fileName.lastIndexOf('.');
|
|
|
|
+ const suffix = fileName.substring(separatorIndex + 1, fileName.length);
|
|
|
|
+ const randomFileName = (new Date()).getTime().toString() + Math.floor(Math.random() * 10000) + '.' + suffix;
|
|
|
|
+ return `${relativePath}${randomFileName}`;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/**
|
|
* 将传入文件对象处理成upload组件格式
|
|
* 将传入文件对象处理成upload组件格式
|
|
* @param {Object/Array}
|
|
* @param {Object/Array}
|
|
* @return {Array} [{}]
|
|
* @return {Array} [{}]
|
|
@@ -62,10 +77,11 @@ class Uploader extends Component {
|
|
fileList: renderFileList(this.props.fileList), // 文件对象列表
|
|
fileList: renderFileList(this.props.fileList), // 文件对象列表
|
|
curFileName: '',
|
|
curFileName: '',
|
|
previewImg: '',
|
|
previewImg: '',
|
|
- previewVisiable: false,
|
|
|
|
|
|
+ previewVisible: false,
|
|
};
|
|
};
|
|
}
|
|
}
|
|
handleBeforeUpload = (file) => {
|
|
handleBeforeUpload = (file) => {
|
|
|
|
+ console.log('call beforeUpload func:', new Date().getTime())
|
|
const { fileCode } = this.props;
|
|
const { fileCode } = this.props;
|
|
if (!checkFileSize(file.name, file.size)) {
|
|
if (!checkFileSize(file.name, file.size)) {
|
|
return false;
|
|
return false;
|
|
@@ -74,9 +90,7 @@ class Uploader extends Component {
|
|
.then((res) => {
|
|
.then((res) => {
|
|
this.setState({
|
|
this.setState({
|
|
ossSign: res.data || res,
|
|
ossSign: res.data || res,
|
|
- curFileName: fileCode ?
|
|
|
|
- fileCode.replace(/-/g, '/') :
|
|
|
|
- file.name.replace(/-/g, '/'), // 处理图片文件名
|
|
|
|
|
|
+ curFileName: getRandomFileName(file.name, fileCode),
|
|
});
|
|
});
|
|
if (res.data) {
|
|
if (res.data) {
|
|
setSignature(res.data); // 保存签名到本地
|
|
setSignature(res.data); // 保存签名到本地
|
|
@@ -84,30 +98,28 @@ class Uploader extends Component {
|
|
});
|
|
});
|
|
}
|
|
}
|
|
handleOnChange = ({ fileList }) => {
|
|
handleOnChange = ({ fileList }) => {
|
|
- const { ossSign, fileCode } = this.state;
|
|
|
|
|
|
+ console.log('call onChange func:', new Date().getTime())
|
|
|
|
+ const { ossSign, curFileName } = this.state;
|
|
const { onUpload, totalLimit } = this.props;
|
|
const { onUpload, totalLimit } = this.props;
|
|
const { dir, host } = ossSign;
|
|
const { dir, host } = ossSign;
|
|
- fileList = fileList.filter((file) => {
|
|
|
|
|
|
+ const newFileList = fileList.filter((file) => {
|
|
if (file.status === 'error') {
|
|
if (file.status === 'error') {
|
|
Message.error(`${file.name}上传失败!`); // 上传失败给出提示并去掉
|
|
Message.error(`${file.name}上传失败!`); // 上传失败给出提示并去掉
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
if (file.status === 'done' && !file.processed) {
|
|
if (file.status === 'done' && !file.processed) {
|
|
Message.success('上传成功');
|
|
Message.success('上传成功');
|
|
- const fileName = fileCode ?
|
|
|
|
- fileCode.replace(/-/g, '/') :
|
|
|
|
- file.name.replace(/-/g, '/');
|
|
|
|
- file.url = `${host}/${dir}${fileName}`;
|
|
|
|
- file.path = `${dir}${fileName}`;
|
|
|
|
|
|
+ file.url = `${host}/${dir}${curFileName}`;
|
|
|
|
+ file.path = `${dir}${curFileName}`;
|
|
file.thumbUrl = file.url;
|
|
file.thumbUrl = file.url;
|
|
file.processed = true;
|
|
file.processed = true;
|
|
}
|
|
}
|
|
return true;
|
|
return true;
|
|
});
|
|
});
|
|
this.setState({
|
|
this.setState({
|
|
- fileList: renderFileList(fileList),
|
|
|
|
|
|
+ fileList: renderFileList(newFileList),
|
|
});
|
|
});
|
|
- const uploaded = fileList.filter((file) => {
|
|
|
|
|
|
+ const uploaded = newFileList.filter((file) => {
|
|
if (file.status === 'done' && file.processed) {
|
|
if (file.status === 'done' && file.processed) {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -133,17 +145,17 @@ class Uploader extends Component {
|
|
handleOnPreview = (file) => {
|
|
handleOnPreview = (file) => {
|
|
this.setState({
|
|
this.setState({
|
|
previewImg: file.url || file.thumbUrl,
|
|
previewImg: file.url || file.thumbUrl,
|
|
- previewVisiable: true,
|
|
|
|
|
|
+ previewVisible: true,
|
|
});
|
|
});
|
|
}
|
|
}
|
|
handleCancelPreview = () => {
|
|
handleCancelPreview = () => {
|
|
this.setState({
|
|
this.setState({
|
|
- previewVisiable: false,
|
|
|
|
|
|
+ previewVisible: false,
|
|
});
|
|
});
|
|
}
|
|
}
|
|
render() {
|
|
render() {
|
|
const { multiple, accept, totalLimit, forbidden } = this.props;
|
|
const { multiple, accept, totalLimit, forbidden } = this.props;
|
|
- const { ossSign, fileList, curFileName, previewImg, previewVisiable } = this.state;
|
|
|
|
|
|
+ const { ossSign, fileList, curFileName, previewImg, previewVisible } = this.state;
|
|
const { host, policy, accessid, signature, dir } = ossSign;
|
|
const { host, policy, accessid, signature, dir } = ossSign;
|
|
|
|
|
|
const uploadProps = {
|
|
const uploadProps = {
|
|
@@ -176,10 +188,10 @@ class Uploader extends Component {
|
|
<Icon type="inbox" />
|
|
<Icon type="inbox" />
|
|
</p>
|
|
</p>
|
|
<p className={styles.dragText}>点击或者拖拽图片到此区域进行上传</p>
|
|
<p className={styles.dragText}>点击或者拖拽图片到此区域进行上传</p>
|
|
- <p className={styles.dragHint}>支持jpg/png图片格式,大小需小于2M</p>
|
|
|
|
|
|
+ <p className={styles.dragHint}>{`支持jpg/png图片格式,大小需小于${FILE_MAX_SIZE}M`}</p>
|
|
</Upload.Dragger>
|
|
</Upload.Dragger>
|
|
<Modal
|
|
<Modal
|
|
- visible={previewVisiable}
|
|
|
|
|
|
+ visible={previewVisible}
|
|
footer={null}
|
|
footer={null}
|
|
onCancel={this.handleCancelPreview}
|
|
onCancel={this.handleCancelPreview}
|
|
width={650}
|
|
width={650}
|