文件上传 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 与正文中的原始内容?的主要内容,如果未能解决你的问题,请参考以下文章