Java 为什么我们需要多部分数据格式的边界?

Java 为什么我们需要多部分数据格式的边界?,java,http,multipartform-data,resttemplate,Java,Http,Multipartform Data,Resttemplate,标题说明了一切。 我是说假设我们要上传多张图片, 对于每个多部分部分,我们将有如下子标题 Content-Disposition: form-data; name="file"; filename="mia.jpeg" Content-Type: image/jpeg Content-Length: 5379 内容长度足以告诉解析器此内容部分何时结束 然后开始另一部分。 但是我很可能遗漏了一些东西,你能帮忙吗?内容长度不是多部分内容的要求。使用长度的问题在以下部分得到解决: 5.2其他数据编码

标题说明了一切。 我是说假设我们要上传多张图片, 对于每个多部分部分,我们将有如下子标题

Content-Disposition: form-data; name="file"; filename="mia.jpeg"
Content-Type: image/jpeg
Content-Length: 5379
内容长度足以告诉解析器此内容部分何时结束 然后开始另一部分。
但是我很可能遗漏了一些东西,你能帮忙吗?

内容长度
不是多部分内容的要求。使用长度的问题在以下部分得到解决:

5.2其他数据编码而非多部分编码

许多人建议使用新的mime顶级类型 “聚合”,例如聚合/混合或内容传输编码 “数据包”表示长度不确定的二进制数据,而不是 依赖于多部分样式边界。虽然这是 “多部分”机制已经很好地建立起来,使用起来很简单 在发送客户端和接收服务器上实现,并作为 与处理多个组合的其他方法一样有效 二进制数据

但是,该文本不在文档中<代码>长度根本不显示在其中

如果你认为一个发送者将一个流的结果作为多个部分的一个部分发送,当它可能事先不知道该流的数据的长度时,这是特别有意义的。如果需要长度,则需要缓存或读取两次

为什么我们需要多部分数据格式的边界

边界是分隔符,用于允许服务器将消息拆分为块或正文部分。多部分请求可以包含任意数量的身体部位。
多部分/表单数据
请求当前在中定义

每个部分都由自己的内容标题(零个或多个
内容-
标题字段)和正文组成。还有一点很重要,即边界分隔符不得出现在任何封装部件内

另一个相关文档是,它定义了多部分MIME数据流:

然后,实体必须包含一个或多个实体零件,每个零件前面有一条边界分隔线,最后一个零件后面有一条闭合边界分隔线。在其边界分隔符行之后,每个主体部分由标题区域、空行和主体区域组成


在解析器解析内容长度之前,它需要将原始数据分割成块,这是有意义的,因此即使省略长度服务器也应该能够解码多部分数据,因为它们的解析算法是基于边界的,而不是计算字节数?@GionJh-对。最后一件事,我在某个地方读过(不记得源代码对不起)以多部分格式发送二进制数据不是一件好事,你应该用Base64编码,你觉得怎么样?@GionJh-我对此没有专门知识,对不起。@CassioMazzochiMolin-谢谢,我找到了第一个,因为令人惊讶的是我没有记住这些。:-)@如果它回答了你的问题,请不要忘记接受它。