只有在有文件数据的时候,才会处理formdata数据,普通接口不要传递formdata数据,没事别瞎JB设置,API接口并不是都需要处理使用formdata的方式来进行
<input onChange={fileChange} type="file" id="file" name="file" />
var resultFile = document.getElementById('file').files[0];
// 从零开始创建 FormData 对象, **只上传文件数据**
var formdata = new FormData();
formdata.append('pn_suffix', values.pn_suffix);
formdata.append('file', resultFile);
var myHeaders = new Headers();
myHeaders.append('X-Auth-Token', getToken(你的token));
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: formdata, // 自动修改请求头,formdata的默认请求头的格式是 multipart/form-data
};
// 调用
fetch(`${API_SERVER}`, requestOptions);
进行Post请求的时候会根据场景发送不同类型的数据, Content-Type: 比如说application/x-www-form-urlencoded、application/json、multipart/form-data、raw等
有时候会需要请求时来手动设置,不过大部分情况下浏览器会根据Body中的数据来自发的设置相应的请求头, 所以一定不要瞎XX设置
一般来说,将<form></form>标签中的enctype设置为multipart/form-data就可以发送
<form action="update.com" method="post" enctype="multipart/form-data">
<p>
name: <input type="text" name="firstname" /><br />
<input type="file" name="file" />
</p>
<p>
<input type="submit" />
</p>
</form>
在这种表单提交的情景下,我们不需要手动设置Content-Type,
所以也不用去管Body中的数据是如何排列的,不需要知道boundary是什么,这些都有浏览器来自动完成。
post请求体(Body)中为 multipart/form-data
既可以上传键值对,也可以上传文件
post请求体(Body)中为 x-www-form-urlencoded
会将表单内的数据转换为键值对,比如,username=张三, 只能上传键值对,并且键值对都是间隔分开的,只是最后会转化为一条信息
raw
以上传任意格式的文本,可以上传text、json、xml、html等- content-type= text/html(HTML 文档);text/plain(纯文本);text/css(CSS 样式表);application/json (json字符串)
binary
- 相当于Content-Type:application/octet-stream
- 从字面意思得知,
只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件
【相关文献】:zhuanlan.zhihu.com/p/195726295
【相关文献】:blog.csdn.net/Eat_a_meal/…
【相关文献】:developer.mozilla.org/zh-CN/docs/…
【相关文献】:developer.mozilla.org/zh-CN/docs/…
结语
前端react QQ群:
788023830----React/Redux - 地下老英雄前端交流QQ群:
249620372----FRONT-END-JS前端(我们的宗旨是,为了加班,为了秃顶……,仰望大佬),希望小伙伴们加群一起学习