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上传文件,它可以正常工作,但仍然没有返回确切的文件大小。
有什么想法吗?感谢。
答案 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¶m2=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>