unw*_*ich 6 file-upload multipartform-data http-headers
正如标题所说,我需要获取作为multipart/form-data请求发布的文件的真实文件大小。
我在 JSF 世界工作,但我认为问题与技术无关(仅取决于 HTTP)。
Content-Length标头中指定的值是不够的,因为它包括边界和其他表单参数。
示例请求(仅正文):
-----------------------------355432893771247592819421210
Content-Disposition: form-data; name="composeform"
composeform
-----------------------------355432893771247592819421210
Content-Disposition: form-data; name="javax.faces.ViewState"
-9107117821100047188:3613431652649065231
-----------------------------355432893771247592819421210
Content-Disposition: form-data; name="file"; filename="3byte.txt"
Content-Type: text/plain
abc
-----------------------------355432893771247592819421210--
Run Code Online (Sandbox Code Playgroud)
请求正文的最后一部分包含文件,在本例中是一个名为“3byte.txt”的文件,其中包含字符“abc”。
如您所见,文件大小未包含在请求中,因此我看到获取该值的唯一方法是根据Content-Length标头以及边界大小和其他表单参数来计算它。
其他要求:
类似的问题没有解决问题:
您不能期望为multipart消息设置 Content-Length 标头(某些多部分请求类型甚至禁止内容长度标头)。它仅需要任一Content-Length标头或一Transfer-Encoding标头是否存在。
Content-Length多部分消息的一部分中不能有标题。
但是,您的发件人可能会在处置标头中设置附加参数。您可以利用它来设置文件大小,如下所示:
Content-Disposition: form-data; name="file"; filename="3byte.txt"; size=123
Run Code Online (Sandbox Code Playgroud)
但这完全是可选的,参数的名称是任意的,并且不需要发送者包含此参数。这意味着,HTTP 服务器引擎永远不能依赖它。
| 归档时间: |
|
| 查看次数: |
7834 次 |
| 最近记录: |