【问题标题】:Why to use multipart/form-data over application/octet-stream?为什么在 application/octet-stream 上使用 multipart/form-data?
【发布时间】:2020-01-26 16:14:13
【问题描述】:

我不清楚它们是什么,我也不太清楚何时使用它们。

例如,我有 REST 客户端,我想发送一个文件(.zip 文件),如果我使用其中任何一种类型会发生什么

  • application/octet-stream 是我猜等于 application/zip,这只是为了给对方提示数据传输,文件以某种方式编码
  • multipart/form-data 以某种方式破坏了数据,您可以传递具有特定 mime 类型的“多个数据”,文件以某种方式编码并且是多部分请求的一部分。在这种情况下,我不确定如何告诉 Feign 客户端请求是多部分的,而确切的部分是八位字节流

但是,如果我只想发送一个文件,那么 multipart 给我的 octet-stream 没有什么?

在这两个请求中,整个文件都以某种方式在内部进行了编码,对吗?处理方式有何不同。我看不出有什么优势。为什么 Feign 客户端教程使用 multipart 还是只是常见的做法?

我还发现,不知何故,您还需要启用服务器中的整个多部分马戏团才能接收它。那么有什么意义呢?

【问题讨论】:

    标签: java rest mime-types feign


    【解决方案1】:

    过去,我使用application/zip 或application/octet-stream 用于.zip 文件。对于您的情况,这些标头中的任何一个都应该可以正常工作。

    根据另一位评论者 -

    "Multipart 用于在一个 HTTP 请求中发送多个部分(例如表单字段和一些文件),并指定文件名和编码。它不会将大文件分成几部分。一个文件仍然只是多部分中的一个部分请求。在这两种情况下都可以包含 HTTP 标头。"

    以下线程也可能提供更多上下文:

    Mutipart form data

    URL encoded multipart form data

    【讨论】:

    • 但是我看不出为什么 multipart 可以处理更大的数据。我会检查规格,看看是否有任何限制。效率相等又如何呢?是否有针对多部分的流式传输?
    • 使用multipart/form-data添加文件时,也会自动添加boundary header,用于分隔数据的多个部分。你没有做任何不同的事情,当使用像Postman这样的引擎时,如果你添加multipart/form-data,它会自动分割文件并为你设置boundary标题。文件被分成几部分
    • 我只看到每个部分都有文件的例子。但无论如何,将文件分成几部分有什么好处。是单独发送部分还是一次发送八位字节流?
    • 对于 REST API,这种推理是毫无疑问的。就我而言,将继续使用 octet-stream。
    • 这听起来像是正确的方法,multipart 通常用于 HTML Web 开发人员接受表单输入的上下文。如果我的回答和讨论对你有帮助,欢迎采纳。
    猜你喜欢
    • 2011-09-19
    • 2011-02-14
    • 2014-06-08
    • 2018-04-07
    • 2010-11-05
    • 2023-04-03
    • 2016-03-13
    相关资源
    最近更新 更多