Upload 文件上传
    
    文件选择上传和拖拽上传控件。
何时使用# 
上传是将信息(网页、文字、图片、视频等)通过网页或者上传工具发布到远程服务器上的过程。
- 当需要上传一个或一些文件时。
 
- 当需要展现上传的进度时。
 
- 当需要使用拖拽交互时。
 
API# 
| 参数 | 
说明 | 
类型 | 
默认值 | 
| name | 
可选参数, 上传的文件 | 
String | 
file | 
| action | 
必选参数, 上传的地址 | 
String | 
无 | 
| data | 
可选参数, 上传所需参数 | 
Object | 
无 | 
| showUploadList | 
可选参数, 是否展示 uploadList, 默认开启 | 
Boolean | 
true | 
| multiple | 
可选参数, 是否支持多选文件,ie10+ 支持。开启后按住 ctrl 可选择多个文件。 | 
Boolean | 
false | 
| accept | 
可选参数, 接受上传的文件类型, 详见 input accept Attribute | 
String | 
无 | 
| beforeUpload | 
可选参数, 上传文件之前的钩子,参数为上传的文件,若返回 false 或者 Promise 则停止上传。注意:该方法不支持老 IE。 | 
Function | 
无 | 
| onChange | 
可选参数, 上传文件改变时的状态,详见 onChange | 
Function | 
无 | 
| listType | 
上传列表的内建样式,支持两种基本样式 text or picture | 
String | 
'text' | 
| className | 
自定义类名 | 
String | 
无 | 
onChange# 
文件状态改变的回调,返回为:
{
  file: { ... },
  fileList: [ ... ],
  event: { ... }
}
file 当前操作的文件对象。
{
  uid: 'uid',      
  name: 'xx.png'   
  status: 'done',  
  response: '{"status":"success"}'  
}
如果上传控件是 multiple 时,此参数将为一个对象数组 [file, ...]。
 
fileList 当前的文件列表。
 
event 上传中的服务端响应内容,包含了上传进度等信息,高级浏览器支持。 
显示下载链接# 
请使用 fileList 属性设置数组项的 url 属性进行展示控制。
IE note# 
  
  代码演示
  
  
  
    
    
    import { Upload, message, Button, Icon } from 'antd';
const 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 + ' 上传失败。');
    }
  }
};
ReactDOM.render(
  <Upload {...props}>
    <Button type="ghost">
      <Icon type="upload" /> 点击上传
    </Button>
  </Upload>
, mountNode);
 
   
  
 
  
    
    
    import { Upload, Button, Icon } from 'antd';
const MyUpload = React.createClass({
  getInitialState() {
    return {
      fileList: [{
        uid: -1,
        name: 'xxx.png',
        status: 'done',
        url: 'http://www.baidu.com/xxx.png'
      }]
    };
  },
  handleChange(info) {
    let fileList = info.fileList;
    
    
    fileList = fileList.slice(-2);
    
    fileList = fileList.map(function(file) {
      if (file.response) {
        
        file.url = file.response.url;
      }
      return file;
    });
    
    fileList = fileList.filter(function(file) {
      if (file.response) {
        return file.response.status === 'success';
      }
      return true;
    });
    this.setState({ fileList });
  },
  render() {
    const props = {
      action: '/upload.do',
      onChange: this.handleChange,
      multiple: true
    };
    return <Upload {...props} fileList={this.state.fileList}>
      <Button type="ghost">
        <Icon type="upload" /> 点击上传
      </Button>
    </Upload>;
  }
});
ReactDOM.render(<MyUpload />, mountNode);
 
   
  
 
  
    
    
    import { Upload, Button, Icon } from 'antd';
const props = {
  action: '/upload.do',
  listType: 'picture',
  defaultFileList: [{
    uid: -1,
    name: 'xxx.png',
    status: 'done',
    url: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
    thumbUrl: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
  }, {
    uid: -2,
    name: 'yyy.png',
    status: 'done',
    url: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
    thumbUrl: 'https://os.alipayobjects.com/rmsportal/NDbkJhpzmLxtPhB.png',
  }]
};
ReactDOM.render(
<div>
  <Upload {...props}>
    <Button type="ghost">
      <Icon type="upload" /> 点击上传
    </Button>
  </Upload>
  <br />
  <br />
  <Upload {...props} className="upload-list-inline">
    <Button type="ghost">
      <Icon type="upload" /> 点击上传
    </Button>
  </Upload>
</div>
, mountNode);
.upload-list-inline .ant-upload-list-item {
  display: inline-block;
  width: 200px;
  margin-right: 8px;
}
 
   
  
 
   
  
  
    
    
    import { Upload, Button, Icon } from 'antd';
const 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'
  }]
};
ReactDOM.render(
  <Upload {...props}>
    <Button type="ghost">
      <Icon type="upload" /> 点击上传
    </Button>
  </Upload>
, mountNode);
 
   
  
 
  
    
    
    import { Upload, Icon } from 'antd';
const Dragger = Upload.Dragger;
const props = {
  name: 'file',
  showUploadList: false,
  action: '/upload.do',
};
ReactDOM.render(
<div>
  <div style={{ width: 246, height: 140 }}>
    <Dragger {...props}>
      <Icon type="plus" />
    </Dragger>
  </div>
  <div style={{ marginTop: 16, height: 180 }}>
    <Dragger {...props}>
      <p className="ant-upload-drag-icon">
        <Icon type="inbox" />
      </p>
      <p className="ant-upload-text">点击或将文件拖拽到此区域上传</p>
      <p className="ant-upload-hint">支持单个或批量上传,严禁上传公司内部资料及其他违禁文件</p>
    </Dragger>
  </div>
</div>
, mountNode);
 
   
  
 
  
    
    
    import { Upload, Button, Icon, message } from 'antd';
const props = {
  action: '/upload.do',
  beforeUpload: function(file) {
    const isJPG = file.type === 'image/jpeg';
    if (!isJPG) {
      message.error('只能上传 JPG 文件哦!');
    }
    return isJPG;
  }
};
ReactDOM.render(
  <Upload {...props}>
    <Button type="ghost">
      <Icon type="upload" /> 点击上传
    </Button>
  </Upload>
, mountNode);