Upload 文件上传
文件选择上传和拖拽上传控件。
何时使用
上传是将信息(网页、文字、图片、视频等)通过网页或者上传工具发布到远程服务器上的过程。
- 当需要上传一个或一些文件时。
- 当需要展现上传的进度时。
- 当需要使用拖拽交互时。
API
参数 |
说明 |
类型 |
默认值 |
name |
可选参数, 上传的文件 |
String |
file |
action |
必选参数, 上传的地址 |
String |
无 |
data |
可选参数, 上传所需参数 |
Object |
无 |
multiple |
可选参数, 是否支持多选文件,支持 ie10+ |
Boolean |
false |
accept |
可选参数, 接受上传的文件类型, 详见 input accept Attribute |
String |
无 |
onChange |
可选参数, 上传文件改变时的状态,详见 onChange |
Function |
无 |
onChange
文件状态改变的回调,返回为:
{
file: { ... },
fileList: [ ... ],
event: { ... }
}
file
当前操作的文件对象。
{
uid: 'uid',
name: 'xx.png'
status: 'done',
response: '{"status":"success"}'
}
如果上传控件是 multiple 时,此参数将为一个对象数组 [file, ...]
。
fileList
当前的文件列表。
event
上传中的服务端响应内容,包含了上传进度等信息,高级浏览器支持。
显示下载链接
请使用 fileList 属性设置数组项的 url 属性进行展示控制。
IE note
组件演示
var Upload = antd.Upload;
var message = antd.message;
var props = {
name: 'file',
action: '/upload.do',
onChange(info) {
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
}
if (info.file.status === 'done') {
message.success(info.file.name + ' 上传成功。');
} else if (info.file.status === 'error') {
message.error(info.file.name + ' 上传失败。');
}
}
};
React.render(
<Upload {...props}>
<button type="button" className="ant-btn ant-btn-ghost">
<i className="anticon anticon-upload"></i> 点击上传
</button>
</Upload>
, document.getElementById('components-upload-demo-basic'));
var Upload = antd.Upload;
var fileList = [{
uid: -1,
name: 'xxx.png',
status: 'done',
url: 'http://www.baidu.com/xxx.png'
}];
var MyUpload = React.createClass({
getInitialState() {
return {
fileList: fileList
};
},
handleChange(info) {
let fileList = info.fileList;
fileList = fileList.slice(-2);
fileList = fileList.map(function(file) {
if (file.response) {
file.url = JSON.parse(file.response).url;
}
return file;
});
fileList = fileList.filter(function(file) {
if (file.response) {
return JSON.parse(file.response).status === 'success';
}
return true;
});
this.setState({
fileList: fileList
});
},
render() {
var props = {
action: '/upload.do',
onChange: this.handleChange,
multiple: true
};
return <Upload {...props} fileList={this.state.fileList}>
<button type="button" className="ant-btn ant-btn-ghost">
<i className="anticon anticon-upload"></i> 点击上传
</button>
</Upload>;
}
});
React.render(<MyUpload />, document.getElementById('components-upload-demo-filelist'));
var Dragger = antd.Upload.Dragger;
var props = {
name: 'file',
action: '/upload.do'
};
React.render(
<Dragger {...props}>
<i className="anticon anticon-plus"></i>
</Dragger>,
document.getElementById('components-upload-demo-drag-simple')
);
var Upload = antd.Upload;
var props = {
action: '/upload.do',
onChange(info) {
if (info.file.status !== 'uploading') {
console.log(info.file);
console.log(info.fileList);
}
},
defaultFileList: [{
uid: -1,
name: 'xxx.png',
status: 'done',
url: 'http://www.baidu.com/xxx.png'
}, {
uid: -2,
name: 'yyy.png',
status: 'done',
url: 'http://www.baidu.com/yyy.png'
}]
};
React.render(
<Upload {...props}>
<button type="button" className="ant-btn ant-btn-ghost">
<i className="anticon anticon-upload"></i> 点击上传
</button>
</Upload>
, document.getElementById('components-upload-demo-defaultfilelist'));
var Dragger = antd.Upload.Dragger;
var props = {
name: 'file',
action: '/upload.do'
};
React.render(
<Dragger {...props}>
<p className="ant-upload-drag-icon">
<i className="anticon anticon-inbox"></i>
</p>
<p className="ant-upload-text">点击或将文件拖拽到此区域上传</p>
<p className="ant-upload-hint">支持单个或批量上传,严禁上传公司内部资料及其他违禁文件</p>
</Dragger>,
document.getElementById('components-upload-demo-drag')
);
var Upload = antd.Upload;
var message = antd.message;
var props = {
action: '/upload.do',
multiple: true,
onChange(info) {
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
}
if (info.file.status === 'done') {
message.success(info.file.name + ' 上传成功。');
} else if (info.file.status === 'error') {
message.error(info.file.name + ' 上传失败。');
}
}
};
React.render(
<Upload {...props}>
<button type="button" className="ant-btn ant-btn-ghost">
<i className="anticon anticon-upload"></i> 点击上传
</button>
</Upload>
, document.getElementById('components-upload-demo-multiple'));