为了处理HTTP POST或PUT中的大型请求主体,依赖HttpServletRequest.getContentLength()
不是一个好主意,因为它只返回整数值,或者对于请求主体返回-1> 2GB。
但是,我认为没有理由,为什么不应该允许更大的请求机构。 RFC 2616说
任何大于或等于零的Content-Length都是有效值。
使用HttpServletRequest.getHeader('content-length')
并将其解析为Long是否有效?
答案 0 :(得分:9)
是的,这是一个很好的方法 - 使用getHeader("Content-Length")
(大写)和Long.parseLong(..)
。我相信这是容器正在做的事情,但它仅限于int
的serlvet规范。
答案 1 :(得分:9)
从Servlet 3.1(Java EE 7)开始,可以使用一种新方法getContentLengthLong()
:
long contentLength = request.getContentLengthLong();
同样适用于回复的对应方setContentLengthLong()
:
response.setContentLengthLong(file.length());