4

File Upload你好,我用过struts2with commons-fileuplod

编辑:当我运行我的演示eclipse with right click and run on server时,上传文件的时间非常小

**Run From ECLIPSE :**   
 File Size : 247 MB
    Time TAken By upload using Run On server From eclipse  :--> 2989 MS

在我deploy same demo war file to Tomcat in webapps folder和跑步的另一边。所以上传文件比以前的情况需要更多的时间。(为什么会有这么大的时差?)

**Run Using Deploy Demo In Tomcat :**
File Size : 247 MB
Time TAken By upload By deploed war file to tomcat web apps folder  :--> 14162 MS

我有java.io.tmpdir变化MonitoredMultiPartRequest.java

        System.setProperty("java.io.tmpdir", "D:\\ankit");
        System.out.println("java.io.tmpdir :--> " + System.getProperty("java.io.tmpdir"));

        UploadListener listener = new UploadListener(servletRequest);
        // Create a factory for disk-based file items
        FileItemFactory factory = new MonitoredDiskFileItemFactory(listener);
        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);

        try{
            long start = System.currentTimeMillis();
            List items = upload.parseRequest(servletRequest);
            long end = System.currentTimeMillis();
            System.out.println("Time TAken By upload 3.2.1 :--> " + (end - start));
            getsystemDetail();
      } catch (Exception e){
        errors.add(e.getMessage());
    }

这里我提到了我的日志:

从 ECLIPSE 运行:

==== System Property =========
java.io.tmpdir :--> D:\ankit
================================
Time TAken By upload File :--> 2989
==================================
##### Heap utilization statistics [MB] #####
Used Memory:46
Free Memory:85
Total Memory:132
Max Memory:675
File system root: C:\
Total space (mb): 79899
Free space (mb): 31833
Usable space (mb): 31833
File system root: D:\
Total space (mb): 158472
Free space (mb): 117366
Usable space (mb): 117366
This is ServletContext RealPath path ::--> D:\eclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FILEUPLOAD_DEMO_OldLIB\
File Uploaded Succ. TO ::-> D:\ankit\eclipse.zip

在 Tomcat 中使用 Deploy Demo 运行:

==== System Property =========
java.io.tmpdir :--> D:\ankit
================================
Time TAken By upload File :--> 14162
==================================
##### Heap utilization statistics [MB] #####
Used Memory:100
Free Memory:31
Total Memory:132
Max Memory:1820
File system root: C:\
Total space (mb): 79899
Free space (mb): 31830
Usable space (mb): 31830
File system root: D:\
Total space (mb): 158472
Free space (mb): 117358
Usable space (mb): 117358
This is ServletContext RealPath path ::--> D:\tools\tomcat7-6\webapps\FILEUPLOAD_DEMO_OldLIB\
File Uploaded Succ. TO ::-> D:\ankit\eclipse.zip
4

1 回答 1

4

假设您的 250mb 文件在您的电脑上C:\并且您从 eclipse 运行,它会将文件复制到同一个驱动器到您的临时目录。即使您的 Eclipse 存在于您的环境中D:\,它也会使用您在 Eclipse 配置中看到的 Windows 操作系统临时目录。在您的 Tomcat 测试中,它使用配置中所见的 Tomcats 临时目录。

因此,如果您的文件位于其中,C:\则如下所示:

从日食运行:

C:\myLargeFile.dat -> C:\Users\ANKITV~1.PAT\AppData\Local\Temp\myLargeFile.dat

在 Tomcat 中使用 Deploy Demo 运行

C:\myLargeFile.dat -> D:\tools\tomcat7-6\temp\myLargeFile.dat

我不知道你的硬件设置,但如果你C:\是固态而你的 D:\ 不是,结果会有很大差异。即使使用高性能硬盘驱动器在硬盘驱动器之间传输时也会出现性能损失,您可以通过在两个驱动器之间复制一个大文件并执行相同的操作,但只需将文件复制到同一驱动器中的不同位置和注意它需要多长时间(确保你复制它而不是移动它)。

测试这是否是问题的一些好方法:

  1. 将您的 tomcat 测试的临时目录更改为您的C:\. 查看这篇文章以获取有关如何执行此操作的更多信息:如何定义 Tomcat 临时目录位置?
  2. 将您的tomcat安装移动到您的C:\并再次测试。非常不言自明,但如果您有系统变量或脚本指向它,可能会做更多的工作。
  3. 将您的 250mb 文件放入您的 D:\ 并尝试将其上传到您的 tomcat 测试,看看时间间隔是否降低。

你能为我们测试一下,让我们知道你发现了什么吗?我有兴趣听到结果!以下是我所指的配置文件中的要点:

从日食运行:

...
java.io.tmpdir=C:\Users\ANKITV~1.PAT\AppData\Local\T...
...

在 Tomcat 中使用 Deploy Demo 运行

...
java.io.tmpdir=D:\tools\tomcat7-6\temp
...
于 2013-10-17T20:50:22.030 回答