我需要制作一个用户可以上传大文件(> 200Mo)的表单。我想在单独的线程中启动上传,以便用户可以启动3-4次上传,然后执行其他操作。我的问题是当我运行辅助线程时删除生成的.tmp文件。 我使用Struts2。
struts2给了我什么:
private String uploadContentType;
private String uploadFileName;
private File upload;
我使用构造函数
将这些信息传递给我的线程MyThread thread=new MyThread (sourceName, uploadFileName, upload, user, database);
thread.start();
在run()方法中:
System.out.println("Src File name: " + myFile);
System.out.println("Dst File name: " + myFileFileName);
File destFile =new File(UPLOAD_DIRECTORY, myFileFileName);
FileUtils.copyFile(myFile, destFile);
错误:
Src Filename:
C:\***myeclipsepath***\upload_1949ed75_1002_4ccf_b198_
25faff66563a_00000003.tmp
Dst File name: books.xml
java.io.FileNotFoundException:
C:\***myeclipsepath***\upload_1949ed75_1002_4ccf_b198_
25faff66563a_00000003.tmp (Le fichier spécifié est introuvable)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at org.apache.commons.io.FileUtils.doCopyFile(FileUtils.java:1068)
at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:1021)
at org.apache.commons.io.FileUtils.copyFile(FileUtils.java:968)
at bo.threads.MyThread .run(MyThread .java:68)
当我逐步调试时,我看到.tmp文件在调用thread.start()时会消失。
那么我怎样才能在主要文件之外的其他线程上传文件?
答案 0 :(得分:2)
在WebApp中运行多个线程基本上不需要,而且几乎总是一个坏主意。
您可能不知道可以upload multiple files concurrently。您还可以调整配置设置以允许大小高于默认阈值的文件(每个文件和每个请求)。
在开始上传后,唯一可以实现让用户做其他事情的要求可以通过以下方式实现:
target="_blank"
在新标签页中打开上传操作(用户然后手动更改上一个标签页)我选择解决方案n.2。
修改强>
感谢您的建议,它应该有效但如何在我的操作中自动关闭标签?
有很多方法,例如,您可以返回包含以下内容的JSP:
<script>
window.close();
</script>
但是考虑通过更具描述性,非自我关闭的页面通知用户操作的正面(或负面)结果,或者(如果你关闭标签)通过中的某种倾听者告知用户其他标签(这将是完美的,这将是一个全新的问题,所以尝试以前的工作)。