使用Tomcat 6,我使用apache commons FileUpload来允许图片上传。我可以使用setSizeMax和setFileSizeMax设置max文件。但似乎上传了整个大文件,然后检查它是否太大了。根据另一个post,似乎setSizeMax应该切断上传,但这不是我得到的行为。
为了测试这一点,我将sizeMax和fieSizeMax设置得非常低,并上传了一个相当大的文件。上传大文件需要15秒,而不是几乎立即切断它。
有什么想法吗?这是一些代码,带有简化的异常子句。
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(30);
upload.setSizeMax(28);
List items = null;
try {
items = upload.parseRequest(request);
} catch (Exception e) {
out.println("exceeded max file size..");
return;
}
更多信息:使用tomcat 6.设置maxPostSize不适用于content-type:multipart / form-data。此外,再次检查请求内容长度需要上载整个文件。最后,使用FileUpload的steaming api似乎也不起作用,因为它似乎再次要求在关闭流之前上传整个文件;即使servlet没有将字节写入磁盘,上传仍将继续。必须有一种方法来防止使用tomcat 6进行大量上传,因为上传图像等对于网络应用来说是一项非常常见的任务。
答案 0 :(得分:1)
无论您是否将它们保存在服务器上,客户端都会发送这些位。服务器无法告诉客户端停止发送不强行关闭输入流的位(因为HTTP的性质:响应跟随请求 - 它们不是同时发生的)。您可以尝试这样做,但是当您执行close()时,大多数应用程序服务器都会从客户端中消耗输入流,因此不会发生任何变化。
如果您可以控制客户端并要求使用100-Continue(通过Expect标头),您可以窥探请求的Content-Length并通过发送否定回复而不是100-Continue来拒绝它
答案 1 :(得分:0)
Tomcat的HTTP连接器具有maxPostSize属性。见Tomcat docs
编辑:太糟糕,不适用于multipart / form-data。您是否考虑过使用已签名的Applet或使用“Java Web Start”来管理上传?