apache FileUpload,tmp文件过早删除

时间:2012-06-22 21:39:31

标签: java apache servlets file-upload

从我的服务器日志中,当我尝试在FileItem上调用getInputStream时:

6/22/12 14:31:14 ERROR c.s.u.WizardUploadReceiver:225          | Jumploader: Problem uploading zip13afcchr.psd - Failed to handle post properly
java.io.FileNotFoundException: uploadtemp\upload__3e026c78_13815404c62__7ff2_00000141.tmp (The system cannot find the file specified)
    at java.io.FileInputStream.open(Native Method) ~[na:1.6.0_23]
    at java.io.FileInputStream.<init>(FileInputStream.java:106) ~[na:1.6.0_23]
    at org.apache.commons.fileupload.disk.DiskFileItem.getInputStream(DiskFileItem.java:236) ~[commons-fileupload-1.2.2.jar:1.2.2]
...

据我所知,在我的servlet方法返回之前,我已经验证了关联的File和FileItem以及DiskFileItemFactory不在范围之外(符合垃圾回收条件)。

我只是在寻找可能导致FileUpload过早删除这些临时文件的其他潜在情况。

其他信息:我只在特定客户端上传文件时才会看到此问题。发送到其他客户端上的同一servlet的相同文件似乎不会导致此问题。我还没有找到有问题的客户和没有问题的客户之间的区别。

1 个答案:

答案 0 :(得分:-1)

可能是您的文件大小超过10 Kb(默认阈值)。当您使用DiskFileItemFactory解析请求时,您应该设置一个新的阈值,如:

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

**factory.setSizeThreshold(102400);**

List /* FileItem */ items = upload.parseRequest(request);