gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:44:06 24 4
gpt4 key购买 nike

正如标题所说,我需要获取作为 multipart/form-data 发布的文件的真实文件大小。要求。

我在 JSF 世界工作,但我认为问题与技术无关(仅取决于 HTTP)。

Content-Length header 中指定的值是不够的,因为它包括边界和其他表单参数。

示例请求(仅正文):

-----------------------------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 header 以及边界大小和其他表单参数来计算它。

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

  • 类似问题没有解决问题:
  • How to know the file size when uploading via multipart form-data?
  • Get file size from multipart form upload Content-Length header
  • Calculate size multipart/form-data encoded file
  • 最佳答案

  • 您不能期望为 multipart 设置 Content-Length header 。消息(某些多部分请求类型甚至禁止内容长度 header )。只需要一个 Content-Length标题或 Transfer-Encoding header 存在。
  • 一定没有Content-Length多部分消息的一部分中的 header 。

  • 但是,您的发件人可能会在处置 header 中设置附加参数。您可以利用它来设置文件大小,如下所示:
    Content-Disposition: form-data; name="file"; filename="3byte.txt"; size=123

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

    关于file-upload - 如何在多部分/表单数据请求中获取文件的实际文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34184568/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com