如何获取GET请求的文件大小

时间:2016-05-12 15:38:48

标签: java servlets

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws Exception{
...
HttpServletRequest req = (HttpServletRequest) request;
if ("POST".equals(req.getMethod()))
{
    long bytesTransferred = request.getContentLength();
    ...
}
else
{
    long bytesTransferred = request.getContentLength();
    ...
}

当我发送GET请求获取文件时,如何获取文件大小? 我尝试使用request.getContentLength(),它总是返回-1。如果我使用POST上传文件,它可以正常工作,但仍然没有返回确切的文件大小。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:3)

  

当我发送GET请求获取文件时,如何获取文件大小?

当服务器向客户端发送文件时(假设客户端是Web浏览器),它知道&#34;文件的大小,因为它将内容写入ServletResponse对象的OutputStream中。当您将文件发送到cliet时,通过调用servlet中的response.setContentLength(<length>)来设置文件的大小。这将设置相应的http响应的Content-Length标头。 Here is the JavaDoc of the setContentLength() method。然后,您可以使用自己喜欢的浏览器的developer tools查看此文件大小或发送到浏览器的任何内容。

  

我尝试使用request.getContentLength(),它总是返回-1

Here是ServletRequest类的getContentLength()方法的JavaDoc:

  

返回请求正文的长度(以字节为单位),并由输入流提供,如果长度未知,则返回-1。

当您向服务器发送POST请求时,请求数据将在请求正文中发送。因此getContentLength()方法返回与数据长度相对应的值。

GET请求会将请求数据附加到请求的网址,例如param1=paramValue1&param2=paramValue2&...。这意味着请求正文中没有数据。因此该方法返回-1指定。

答案 1 :(得分:0)

如果您使用html表单提交请求,则应明确声明方法发布,如下所示:

<form enctype="multipart/form-data" method="post" name="formName"
   action="<url>">
    <input type="file" contenteditable="false" multiple>
    <input type="submit" value="Submit">
</form>