项目有时候会有文件上传的需求。在react + ant design项目中,使用表单组件进行表单数据和文件一起提交上传时,reqwest和axios都是不错的请求方式,使用方式也有异同。
数据方面利用formData来进行处理文件信息和表单数据。组件用的是ant design里面的Form和Upload。
```
let formData = new FormData();
// 文件信息
let { fileList } = this.state;
// 批量上传
for (let item of fileList) {
formData.append('file', item)
}
// 要提交的表单数据
formData.append('flowId', infoApprove.flowId);
formData.append('functionId', functionId);
formData.append('linkId', infoApprove.linkId);
formData.append('opinion', infoApprove.opinion);
formData.append('statusId', infoApprove.statusId);
formData.append('taskId', infoApprove.taskId);
formData.append('userId', infoApprove.userId);
```
reqwest请求:
```
reqwest({
url: server_host+`/yunwei/task/flowBlock`, // 上传url
method: 'post',
processData: false, //必须false才会避开jQuery对 formdata 的默认处理
contentType: false, //必须false才会自动加上正确的Content-Type
data: formData,
success: () => {
that.setState({
fileList: [],
})
message.success('提交成功');
},
error: () => {
message.error('提交失败');
},
});
```
axios请求:
```
/*
* formData已经对文件的数据进行过处理了,借此保证可以传到后台服务器
* 上传文件时一定要指定'Content-Type':'multipart/form-data'
*/
axios.post(server_host+`/yunwei/task/flowBlock`,formData,{
'Content-Type':'multipart/form-data'
}).then(res=>{
if(res.status === 200){
this.setState({
fileList: [],
})
message.success('提交成功');
}else{
message.error('提交失败');
}
})
```
附上FormData的介绍:
FormData对象用以将数据编译成键值对,以便用XMLHttpRequest来发送数据。其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()方法来发送数据,从而,发送数据具有同样形式。
参考链接:
[https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects]()
- JS系列
- jQuery和axios的同步请求
- FormData和文件上传
- Http请求参数系列
- 面向对象:JS中的类与继承
- super关键字总结
- import和require语法的报错解决
- 常用的N个JS函数
- ES6新增的Set和Map
- 关于this的学习
- 人人都要会的防抖和节流
- AJAX的简单实现
- Vue
- nuxt
- 在nuxt中引入qrcode或者其他依赖包
- iVew
- 树形控件Tree的render函数
- 自定义组件:Upload封装
- React
- antd自适应高度表格
- 两个常用生命周期函数总结
- antd表格跨行处理(动态数据)
- antd中表单自定义验证踩坑
- Form+Upload实现文件上传全步骤
- 在react中实现Excel导出
- 表格嵌套和子表展开的处理
- 关于表格打印的一点思路
- Select组件中的模糊筛选
- echarts使用与总结
- echarts在react中的使用
- 简单的双层上下钻
- 复杂的多层上下钻(多次请求)
- 复杂的多层上下钻(单次请求)
- Git使用
- git基础一:安装git以及基本命令
- git基础二:add和commit
- 地图API
- 手动绘制点来实现驾车导航
- 地图自定义控件的使用
- 利用自定义标注实现头像展示
- 杂谈与总结
- 谈代码的可读性
- 简单总结判断代码质量的维度
- 3W模型看面向对象
