gpt4 book ai didi

java - 在 Java Web 应用程序中的单独线程中上传文件

转载 作者:行者123 更新时间:2023-11-30 03:19:06 25 4
gpt4 key购买 nike

我需要制作一个表单,用户可以在其中上传大文件(>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)

当我逐步调试时,我发现当我调用 thread.start() 时,.tmp 文件消失了。

那么我如何在主线程以外的其他线程上上传文件?

最佳答案

在 Web 应用程序中运行多个线程基本上是不需要的,而且几乎总是一个坏主意。

您可能不知道您可以upload multiple files concurrently 。您还可以调整配置设置,以允许文件大小高于默认阈值(每个文件和每个请求)。

要满足让用户在开始上传后执行其他操作的要求,剩下的唯一事情可以通过以下任一方式实现:

  1. 在新标签页中打开上传页面,然后运行标准提交(然后用户手动更改上一个标签页)
  2. 使用 target="_blank" 在新标签页中打开上传操作(然后用户手动更改上一个标签页)
  3. 通过 AJAX 上传(但由于尺寸过大,您可能会遇到限制和问题)。

我会选择解决方案 n.2。

<小时/>

编辑

Thank you for your advice, it should work but how can I close automatically the tab in my action ?

有很多方法,例如您可以返回包含以下内容的 JSP:

<script>
window.close();
</script>

但请考虑使用更具描述性的非自动关闭页面或(如果关闭选项卡)使用来自 的某种监听器来通知用户操作的积极(或消极)结果other 选项卡(这将是完美的,这将是一个全新的问题,因此请先尝试使其工作)。

关于java - 在 Java Web 应用程序中的单独线程中上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31782910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com