文件上传组件的比较

  在上传量较小(容量<2M,这是最常出现的情况)时,Cos比FileUpload性能并没有好很多,但SmartUpload就已经开始显出弱势。
   随着容量的增大,FileUpload和SmartUpload的性能下降非常快,直到200M容量时,SmartUpload已经不堪重负崩溃了,而Cos此时的花费时间比FileUpload少了20多秒,不能不说在本次的评测中,Cos的性能位居第一。

   通过对三种流行的上传组件进行对比,我认为选用Cos是比较好的。在实际的项目中,可以把上传的文件放到文件夹,文件路径存于数据库中以便于管理。
   如果需要把文件上传到数据库也很简单,从Cos中已经得到了上传文件(java.io.File),其后的操作很平常所做的一样:  通过File得到inputStream,存到数据库的blob或Clob字段即可。

   对于使用Struts的项目,我觉得还是使用FileUpload比较好,因为Struts天生集成了FileUpload的功能,使用FileUpload会带来很多的便利。而如果想要开发独立的上传组件,则用Cos是最好的选择,可以在Cos的基础上封装一层,暴露给业务程序员的只是一些简单易用的API,而且可以给这些API加上自定义的javaDoc,这对于实际的开发和将来的扩展都是非常方便的。

以下使用cos组件简单的实现文件上传功能:
1. 将下载的cos.jar文件所在目录加入到环境变量classpath中
2. 编写一个html文件uploadExample.htm:
1. 2. http://www.w3.org/TR/html4/loose.dtd>
3. 
4. 
5. 
6. 实现文件上传的一个例子程序
7. 
8. 
9. 


10. 
11. 

12. 

13. 

14. 
15. 
16. 
17. 
18. 
19. 
20. 
21. 
22. 
23. 
24. 
25. 
26. 
27. 

28. 

29. 

30. 
31. 
3. 实现上传文件功能可以写一个Servlet, 这里简单起见,写成一个upload.jsp文件:
1. <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
2. 
3. 
4. 
5. 
6. 实现文件上传功能
7. <%@page import="com.oreilly.servlet.MultipartRequest" %>
8. <%@page contentType="text/html; charset=gb2312" %>
9. <%
10. //文件上传后,保存在"f:/uploadfiles"
11. String saveDirectory = "f:/uploadfiles";
12. //每个文件最大5m,最多3个文件,所以...
13. int maxPostSize = 3 * 5 * 1024 * 1024 ;
14. //response的编码为gb2312,同时采用缺省的文件名冲突解决策略,实现上传
15. MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "gb2312");
16. %>
4. 将以上两个文件放到tomcat安装目录\webapps目录下的一个文件夹如uploadExample下即可
附:(http://blog.csdn.net/hdhero/archive/2005/03/22/326405.aspx)
一.SmartUpload组件例子代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%@ page import="com.jspsmart.upload.*" %>
<%
   //实例化上载bean
    SmartUpload mySmartUpload=new SmartUpload();
    //初始化
    mySmartUpload.initialize(pageContext);
    //设置上载的最大值,注意:如果这里设置过大会出现问题!
    mySmartUpload.setMaxFileSize(500 * 1024*1024);
    //上载文件
    mySmartUpload.upload();
   //循环取得所有上载的文件
   for (int i=0;i   //取得上载的文件
   com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);
   if (!myFile.isMissing())
    {
   //取得上载的文件的文件名
    String myFileName=myFile.getFileName();
    //取得不带后缀的文件名
    String  suffix=myFileName.substring(0,myFileName.lastIndexOf('.'));
    //取得后缀名
    String  ext= mySmartUpload.getFiles().getFile(0).getFileExt(); 
    //取得文件的大小 
    int fileSize=myFile.getSize();
    //保存路径
    String aa=getServletContext().getRealPath("/")+"jsp\\";
    String trace=aa+myFileName;
    //取得别的参数
    String explain=(String)mySmartUpload.getRequest().getParameter("text");
    String send=(String)mySmartUpload.getRequest().getParameter("send");
    //将文件保存在服务器端
    myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL);
    %>
注意使用smartupload上传过大文件,或者多文件的时候可能出现CPU或内存占用过高的问题.只有重新启动容器才能恢复正常!
二.commons-fileupload组件
<%@ page language=“java”contentType=“text/html;charset=GBK”%>
<%@ page import=“java.util.*”%>
<%@ page import=“org.apache.commons.fileupload.*”%>


文件上传

<%
 DiskFileUpload fu = new DiskFileUpload();
 // 设置允许用户上传文件大小,单位:字节
 fu.setSizeMax(10000000);
 // 设置最多只允许在内存中存储的数据,单位:字节
 fu.setSizeThreshold(4096);
 // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
 fu.setRepositoryPath(“D:\\Tomcat5\\TEMP”);
 //开始读取上传信息
 List fileItems = fu.parseRequest(request);
 // 依次处理每个上传的文件
 Iterator iter = fileItems.iterator();
 while (iter.hasNext()) {
  FileItem item = (FileItem) iter.next();
  //忽略其他不是文件域的所有表单信息
  if (!item.isFormField()) {
   String name = item.getName();
   item.write(“D:\\UploadTest\\”+ name);
 }
}
%>

你可能感兴趣的:(Struts,HTML,JSP,EXT,SQL)