ant-design/components/upload/demo/upload-manually.md

100 lines
2.1 KiB
Markdown
Raw Normal View History

2017-07-14 15:00:14 +08:00
---
order: 7
title:
zh-CN: 手动上传
en-US: Upload manually
---
## zh-CN
`beforeUpload` 返回 `false` 后,手动上传文件。
## en-US
Upload files manually after `beforeUpload` returns `false`.
2019-05-07 14:57:32 +08:00
```jsx
use ant design icons 4.0 (#18217) * feat: use @ant-design/icons@4.0 * feat: use createFromIconfontCN to make site works * feat: update doc for Icon * feat: use icon in component Alert * feat: use icon in component Avatar * feat: use icon in component Breadcrumb * feat: use icon in component Button * feat: use icon in component Cascader * feat: use icon in component Collapse * feat: use icon in component Datepicker * feat: use icon in component Dropdown * feat: use icon in component Form * feat: use icon in component Input * feat: use icon in component InputNumber * feat: use icon in component Layout * feat: use icon in component Mention * feat: use icon in component Message * feat: use icon in component Modal * feat: use icon in component Notification * feat: use icon in component PageHeader * feat: use icon in component Pagination * feat: use icon in component Popconfirm * feat: use icon in component Progress * feat: use icon in component Rate * feat: use icon in component Result * feat: use icon in component Select * feat: use icon in component Step * feat: use icon in component Switch * feat: use icon in component Table * feat: use icon in component Tab * feat: use icon in component Tag * feat: handle rest component which using Icon * fix: remove unused vars * feat: use latest alpha ant design icons * fix: failed test in uploadlist.test.js * test: update snapshot for icons * doc: add Icon for site * doc: use @ant-design/icons in site * chore: use latest icons * fix: tslint issue * fix: test cases * fix: types for react * fix: lint rules for import orders * fix: use @ant-design/icons@4.0.0-alpha.5 to avoid insert css in server render * fix: eslint error in demo/**.md * inject antd icons * update snapshot * fix site * doc: update docs * fix: code snippets icon in site * feat: use latest @ant-design/icons * fix: icon props in message
2019-08-13 14:07:17 +08:00
import { Upload, Button, message } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
2017-07-14 15:00:14 +08:00
class Demo extends React.Component {
state = {
fileList: [],
uploading: false,
2019-05-07 14:57:32 +08:00
};
2017-07-14 15:00:14 +08:00
handleUpload = () => {
const { fileList } = this.state;
const formData = new FormData();
2019-05-07 14:57:32 +08:00
fileList.forEach(file => {
2017-07-14 15:00:14 +08:00
formData.append('files[]', file);
});
this.setState({
uploading: true,
});
// You can use any AJAX library you like
fetch('https://www.mocky.io/v2/5cc8019d300000980a055e76', {
method: 'POST',
body: formData,
})
.then(res => res.json())
.then(() => {
2017-07-14 15:00:14 +08:00
this.setState({
fileList: [],
});
message.success('upload successfully.');
})
.catch(() => {
message.error('upload failed.');
})
.finally(() => {
2017-07-14 15:00:14 +08:00
this.setState({
uploading: false,
});
});
2019-05-07 14:57:32 +08:00
};
2017-07-14 15:00:14 +08:00
render() {
const { uploading, fileList } = this.state;
2017-07-14 15:00:14 +08:00
const props = {
2019-05-07 14:57:32 +08:00
onRemove: file => {
this.setState(state => {
const index = state.fileList.indexOf(file);
const newFileList = state.fileList.slice();
2017-07-14 15:00:14 +08:00
newFileList.splice(index, 1);
return {
fileList: newFileList,
};
});
},
2019-05-07 14:57:32 +08:00
beforeUpload: file => {
this.setState(state => ({
fileList: [...state.fileList, file],
2017-07-14 15:00:14 +08:00
}));
return false;
},
fileList,
2017-07-14 15:00:14 +08:00
};
return (
<>
2017-07-14 15:00:14 +08:00
<Upload {...props}>
<Button icon={<UploadOutlined />}>Select File</Button>
2017-07-14 15:00:14 +08:00
</Upload>
<Button
type="primary"
onClick={this.handleUpload}
disabled={fileList.length === 0}
2017-07-14 15:00:14 +08:00
loading={uploading}
style={{ marginTop: 16 }}
2017-07-14 15:00:14 +08:00
>
2019-05-07 14:57:32 +08:00
{uploading ? 'Uploading' : 'Start Upload'}
2017-07-14 15:00:14 +08:00
</Button>
</>
2017-07-14 15:00:14 +08:00
);
}
}
ReactDOM.render(<Demo />, mountNode);
2019-05-07 14:57:32 +08:00
```