文件上传 API:Multipart/form-data 与正文中的原始内容?

Posted

技术标签:

【中文标题】文件上传 API:Multipart/form-data 与正文中的原始内容?【英文标题】:File upload API: Multipart/form-data vs. raw contents in body? 【发布时间】:2015-11-26 22:53:51 【问题描述】:

我注意到(至少)有两种方法可以通过 API 将文件上传到 HTTP 服务器。

您可以使用multipart/form-data(这是浏览器在本地上传文件的 html 输入),但您也可以使用POST 请求正文中的文件内容(可能带有正确的 Content-Type 请求标头)。

每种方法的优缺点是什么(总的来说,不是来自浏览器)?

例如,多部分请求——取决于你在编程环境中使用的 http 或网络库(我在服务器端使用 Node.js,在客户端使用 Swift)——似乎创建起来有点复杂,然后解析。

【问题讨论】:

检查***.com/questions/29659154/… @vtortola 并不是这个问题的真正答案。我不是在问任何客户端网络实现,只是关于 http 方法。 【参考方案1】:

协议级别的唯一区别是multipart/form-data 请求必须遵守RFC 2388,而自定义类型的请求正文可以是任意的。

由此带来的实际含义是 multipart/form-data 请求通常更大:虽然客户端在技术上允许使用非 7 位 content-transfer-encoding,但大多数使用 base64。如果上传了许多小文件,MIME 标头会产生额外的开销,这可能会成为瓶颈。请注意,现有客户端/库中对multipart/form-data 文件上传的支持更为广泛。如果您对客户端和中间主机(代理服务器)的功能集不够确定,则应始终将其作为备用。特别要记住,如果您正在为第三方设计 API,其他开发人员已经熟悉 multipart/form-data 并且手头有库可以使用。

【讨论】:

需要一个固执己见的答案,而不是“你根据这些东西来决定” 如有疑问,请使用multipart/form-data

以上是关于文件上传 API:Multipart/form-data 与正文中的原始内容?的主要内容,如果未能解决你的问题,请参考以下文章

怎么样使用Python发送form-data请求及拼接内容

struts2的文件上传机制

带有模型的 mvc 上传文件 - 第二个参数发布的文件为空

在jQuery中上传之前单击预览按钮时显示图像[重复]

如果在primefaces中禁用复选框值,则该值将为false

php使用curl的post方法字符串和数组传值的区别