POST请求中的multipart/form-data

试图使用axios通过POST上传文件,后端一直拿不到参数,研究了下发现axios不直接支持multipart/form-data类型,后改用request模块实现。

本文同步发表在我的个人博客POST请求中的multipart/form-data

个人博客的评论系统加了邮件通知,有什么想和作者说的建议在个人博客留言哦

后续若有变化,将只在个人博客更新,恕此处不再修改

Content-Type是什么?

Content-Type 实体头部用于指示资源的MIME类型 media type 。

在响应中,Content-Type标头告诉客户端实际返回的内容的内容类型。浏览器会在某些情况下进行MIME查找,并不一定遵循此标题的值; 为了防止这种行为,可以将标题 X-Content-Type-Options 设置为 nosniff。

Content-Type的句法示例:

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

media-type

资源或数据的 MIME type 。

charset

字符编码标准。

boundary

对于多部分实体,boundary 是必需的,其包括来自一组字符的1到70个字符,已知通过电子邮件网关是非常健壮的,而不是以空白结尾。它用于封装消息的多个部分的边界。
例子

为什么上传文件时要设置为multipart/form-data?

我们知道上传文件的时候media-type要设置为 multipart/form-data ,这是为什么呢?为什么不已有使用application/x-www-form-urlencoded呢?

因为此类型不适合用于传输大型二进制数据或者包含非ASCII字符的数据。平常我们使用这个类型都是把表单数据使用url编码后传送给后端,二进制文件当然没办法一起编码进去了。所以multipart/form-data就诞生了,专门用于有效的传输文件

npm的Form-Data包

首先我们来看它的介绍:

A library to create readable “multipart/form-data” streams. Can be used to submit forms and file uploads to other web applications.

The API of this library is inspired by the XMLHttpRequest-2 FormData Interface.

大意是会将可读的数据格式化成 multipart/form-data 流数据,用来提交表单或上传文件。开头提到的request模块也是用它来解决的数据格式问题,我们在request文档中找到如下描述:

For multipart/form-data we use the form-data library by @felixge. For the most cases, you can pass your upload form data via the formData option.

总结

Content-Type用来指定资源类型,multipart/form-data专用有效的传输文件,一些请求库例如request内部支持这种格式,而一些请求库例如axios是不支持的。一个npm模块Form-Data可以用来把数据(比如字符串、buffer、文件流)等转换成此格式。

request已经停止维护了,作者解释是因为历史包袱比较重,建议尽量选择一些更新的http请求模块吧。

参考文献:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HttpPost是HTTP请求方法之一,用于向服务器提交数据。multipart/form-data请求是一种特殊的POST请求,用于上传文件或提交包含多个部分的表单数据。 在multipart/form-data请求,需要设置Content-Type属性,并指定boundary(分隔符)。这个分隔符用于隔开提交的表单不同部分的数据或分割多个文件。在设置Content-Type时,必须同时指定使用的boundary,否则上传过程会出错导致上传不成功。boundary也可以自定义设置。 在Java,可以使用HttpURLConnection类发送HttpPost multipart/form-data请求。可以通过设置请求头的方式指定Content-Type为multipart/form-data,并设置boundary。例如: urlConnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); 这样设置之后,就可以使用HttpPost方法发送multipart/form-data请求,将文件或表单数据以多个部分的形式提交给服务器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Http之HttpURLConnection-POST发送请求multipart/form-data)](https://blog.csdn.net/qq_16957817/article/details/109205773)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值