您好我在File Upload
struts2
使用了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
答案 0 :(得分:4)
假设您的250mb文件在C:\
上,并且您从eclipse运行,它会将文件复制到您的临时目录中的同一驱动器。即使您的eclipse存在于D:\
中,它也会使用您的Windows操作系统临时目录,如eclipse配置中所示。在Tomcat测试中,它使用Tomcats临时目录,如配置中所示。
因此,如果您的文件位于C:\
,则如下所示:
从eclipse运行:
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:\不是,则结果会有很大差异。即使使用高性能硬盘驱动器在硬盘驱动器之间进行传输也会造成性能损失,您可以通过在两个驱动器之间复制大文件来做到这一点,并且只需将文件复制到同一驱动器中的不同位置即可。留意它需要多长时间(确保你复制它不移动它)。
测试这是否是问题的一些好方法:
C:\
。查看此帖子,了解有关如何执行此操作的详细信息:How is the Tomcat temp directory location defined? C:\
并再次测试。非常自我解释,但如果您有系统变量或脚本指向它,可能会更多工作。你能为我们测试一下,让我们知道你发现了什么吗?我很想听听结果! 以下是我所指的配置文件中的要点:
从eclipse运行:
...
java.io.tmpdir=C:\Users\ANKITV~1.PAT\AppData\Local\T...
...
在Tomcat中使用Deploy Demo运行
...
java.io.tmpdir=D:\tools\tomcat7-6\temp
...