我在Tomcat 6.0.26中运行servlet。 servlet通过HTTP POST接受来自客户端的文件上载。我想停止从HttpServlet端上传文件。我没有运气,尝试了以下方法:
感谢。
答案 0 :(得分:5)
使用标准Servlet和Commons FileUpload API是不可能的。基本上,为了能够立即中止连接,您应该物理地抓住底层套接字并关闭它。但是,此套接字由Web服务器控制。另请参阅此相关问题:How to explicitly terminate http connection from server with no response header。
然而,很少有测试证实,当Commons FileUpload的大小超过限制时,它不会将整个文件缓冲在内存中。它将读取输入流,但只是忽略并丢弃读取的字节(也是已读取的字节)。因此,内存效率不一定是这里的问题。
要解决实际问题,您基本上希望在客户端而不是服务器端验证文件大小。这可以通过Java Applet或Flash应用程序实现。例如,分别为JumpLoader和SWFUpload。
答案 1 :(得分:4)
使用标准API无法做到这一点。如果你这样做,你就违反了一些协议标准/ RFC。那你为什么要那样做?
相反,发送没有http正文的“Connection:close”响应(http标头)。
答案 2 :(得分:3)
这里有一些疯狂的解决方法:您可以根据处理HTTP请求的套接字编写(或找到某处)某些防火墙独立应用程序,解析标头,如果请求与您的自定义条件匹配,则防火墙将其转发给Tomcat,否则返回HTTP错误回应。或者您可以尝试调整Apache< - > Tomcat有一些Apache规则。
答案 3 :(得分:1)
问题或多或少与Aborting upload from a servlet to limit file size
重复您是否尝试过使用Apache Commons FileUpload?
服务器对象中有一个setFileSizeMax方法,表示从请求中上传文件。