【问题标题】:How to know the file size when uploading via multipart form-data?通过多部分表单数据上传时如何知道文件大小?
【发布时间】:2014-08-31 21:20:49
【问题描述】:

我正在使用 HTML 客户端执行一个简单的应用程序,该应用程序将文件上传到服务器并且必须显示进度条:)

服务器是基于 servlet 的,一些 servlet 接收多部分内容,解析它等等。显然,每时每刻我都知道到目前为止接收到的字节数。然而,为了在客户端提供进度条的信息,servlet 还需要上传文件的总字节数。知道从哪里获取总字节数吗?

谢谢!

【问题讨论】:

    标签: java servlets multipartform-data


    【解决方案1】:

    我认为你必须在客户端用javascript实现进度条。

    无论如何,this link 解释了如何使用 JQuery 来完成。


    服务器可以从HTTP请求头中获取正在上传的multipart的大小;请参阅@ilya 的回答。但是,将这些信息和到目前为止读取的字节数放入显示或更新进度条的 HTTP 响应流中会相当复杂......

    【讨论】:

    • 当然,我会在客户端使用 JS。不过,感谢您的帮助。
    • 我认为你错过了我的观点。进度需要在客户端衡量
    • 啊,谢谢你的澄清。我认为对于我的代码,服务器端测量就足够了。
    • 如果你上传一个文件内容长度不是文件大小!
    • 现在显然,如果 OP(迂腐地)想要显示一个排除非文件信封的进度监视器,那么是的,他必须测量在不同级别传输的(每个文件)字节。但坦率地说,最终用户无法分辨出其中的区别,因此这将是浪费编码工作。
    【解决方案2】:

    内容的大小放置在 Content-Length 标头中(请参阅rfc2616)。在 Servlet 中,您可以通过 request.getContentLength()reqest.getHeaders("Content-Length") 获取此标头的值

    【讨论】:

    • 谢谢,只有一个问题:如果我请求完整的 Content-Length(并且只有一个文件正在上传),长度是否也包括其他文本表单字段?
    • 是的。 Content-Length 包括其他字段的大小。我建议您使用 Apache File Upload lib 来解析 Http Request。
    • 因此这个答案在技术上确实不正确...... HTTP标头(POST请求中只有一个)“Content-Length”是可选的,而且包括所有表单字段,开销字节等加上 FILE 部分的实际大小(这是 OP 询问的内容)。简而言之,HTTP Header "Content-Length" 不等于上传文件的大小。遗憾的是,正确的答案非常复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2021-02-04
    • 1970-01-01
    • 2018-02-15
    相关资源
    最近更新 更多