File upload 如何在多部分/表单数据请求中获取文件的实际文件大小

File upload 如何在多部分/表单数据请求中获取文件的实际文件大小,file-upload,http-headers,multipartform-data,File Upload,Http Headers,Multipartform Data,正如标题所说,我需要获得发布为多部分/表单数据请求的文件的实际文件大小 我来自JSF世界,但我认为问题在于技术不可知(只取决于HTTP) 内容长度标题中指定的值不够,因为它包含边界和其他表单参数 请求示例(仅正文): 请求正文的最后一部分包含该文件,在本例中是一个名为“3byte.txt”的文件,其中包含字符“abc” 正如您所看到的,请求中不包含文件大小,因此我看到获取该值的唯一方法是基于内容长度头、边界大小和其他表单参数来计算它 附加要求: 解决方案不必读取/解析整个请求来获得文件大小(这

正如标题所说,我需要获得发布为
多部分/表单数据
请求的文件的实际文件大小

我来自JSF世界,但我认为问题在于技术不可知(只取决于HTTP)

内容长度标题中指定的值不够,因为它包含边界和其他表单参数

请求示例(仅正文):

请求正文的最后一部分包含该文件,在本例中是一个名为“3byte.txt”的文件,其中包含字符“abc”

正如您所看到的,请求中不包含文件大小,因此我看到获取该值的唯一方法是基于内容长度头、边界大小和其他表单参数来计算它

附加要求:

  • 解决方案不必读取/解析整个请求来获得文件大小(这显然很容易)
  • 请求中可能有更多的表单参数,在包含文件的部分之前或/和之后(与我的示例相反)
没有解决问题的类似问题:

  • 您不能期望为
    multipart
    消息设置内容长度头(某些多部分请求类型甚至禁止内容长度头)。只要求存在
    内容长度
    标题或
    传输编码
    标题

  • 多部分消息的一部分中不得有
    内容长度

  • 但是,发件人可以在disposition标头中设置附加参数。您可以利用此设置文件大小,如下所示:

    Content-Disposition: form-data; name="file"; filename="3byte.txt"; size=123
    

    但这完全是可选的,参数的名称是任意的,不需要发送方包含此参数。这意味着,HTTP服务器引擎永远不能依赖它。

    看起来确实没有标准的解决方案,因此我现在接受这个答案。
    Content-Disposition: form-data; name="file"; filename="3byte.txt"; size=123