如标题所示,我需要获取作为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--
请求主体的最后一部分包含文件,在本例中为文件“ 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
但这纯粹是可选的,参数的名称可以是任意的,并且不需要发送者包括此参数。这意味着HTTP服务器引擎永远不能依赖它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句