【问题标题】:Upload a file in a separate thread in a java webapp在 java webapp 的单独线程中上传文件
【发布时间】:2023-03-14 14:11:01
【问题描述】:

我需要制作一个用户可以上传大文件 (>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() 时消失了。

那么我怎样才能在主线程之外的其他线程上上传文件呢?

【问题讨论】:

    标签: java multithreading web-applications struts2 upload


    【解决方案1】:

    基本上从不需要在 WebApp 中运行多个线程,而且几乎总是一个坏主意。

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

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

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

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


    编辑

    感谢您的建议,它应该可以工作,但是如何在我的操作中自动关闭标签?

    有很多方法,例如可以返回一个由以下内容组成的JSP:

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

    但请考虑使用更具描述性的非自动关闭页面或(如果您关闭选项卡)通过 中的某种侦听器通知用户操作的正面(或负面)结果其他 选项卡(这将是完美的,这将是一个全新的问题,因此请尝试在此之前进行此工作)。

    【讨论】:

    • 感谢您的建议,它应该可以工作,但我怎样才能在我的操作中自动关闭关闭选项卡?
    • 好的,如果操作成功,我将发送成功和失败警报以及定时关闭脚本
    • 好,听起来比原来的更好(很多);)
    猜你喜欢
    • 2012-09-29
    • 2014-06-08
    • 2010-12-04
    • 2023-04-01
    • 1970-01-01
    • 2013-09-23
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多