javax.servlet.HttpServletRequest.getContentLength()仅返回int

Han*_*ank 11 java servlets

为了处理HTTP POST或PUT中的大型请求主体,依赖HttpServletRequest.getContentLength()不是一个好主意,因为它只返回整数值,或者对于> 2GB的请求主体,返回-1.

但是,我认为没有理由,为什么不应该允许更大的请求机构.RFC 2616说

任何大于或等于零的Content-Length都是有效值.

是否有效使用HttpServletRequest.getHeader('content-length')并将其解析为Long?

Boz*_*zho 9

是的,这是一个很好的方法 - 使用getHeader("Content-Length")(大写)和Long.parseLong(..).我相信这是容器正在做的事情,但它受限于intserlvet规范.


Bal*_*usC 9

从Servlet 3.1(Java EE 7)开始,可以使用一种新方法getContentLengthLong():

long contentLength = request.getContentLengthLong();
Run Code Online (Sandbox Code Playgroud)

这同样适用于答复的对应方setContentLengthLong():

response.setContentLengthLong(file.length());
Run Code Online (Sandbox Code Playgroud)