`

文件上传组件的比较与使用续

阅读更多

从上述的表格对比中可以看出Cos始终保持着良好的性能。在上传量较小(容量<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. <!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
2. http://www.w3.org/TR/html4/loose.dtd>
3. <html>
4. <head>
5. <meta http-equiv=Content-Type content=text/html; charset=gb2312>
6. <title>实现文件上传的一个例子程序</title>
7. </head>
8. <body>
9. <div align="center">
10. <!-- enctype参数很重要,当向服务器传送如片或文件这样包含非ASCII字符或二进制数的数据时,跟据RFC1867规定必须使用"mutiplepart/form-data"内容类型-->
11. </div>
12. <form name=form1  method=post enctype=multipart/form-data action=upload.jsp>
13. <div align="center">
14. <table width="255" border="1" >
15. <tr>
16. <td><input name=file12 type=file></td>
17. </tr>
18. <tr>
19. <td><input name=file2 type=file></td>
20. </tr>
21. <tr>
22. <td><input name=file3 type=file></td>
23. </tr>
24. <tr>
25. <td align="center"><input type=submit name=Submit value=提交></td>
26. </tr>
27. </table>
28. </div>
29. </form >
30. </body>
31. </html>
3. 实现上传文件功能可以写一个Servlet, 这里简单起见,写成一个upload.jsp文件:
1. <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3. <html xmlns="http://www.w3.org/1999/xhtml">
4. <head>
5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
6. <title>实现文件上传功能 </title>
7. </head><%@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<mySmartUpload.getFiles().getCount();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.*”%>
<html>
<head>
<title>文件上传</title>
</head>
<%
 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);
 }
}
%>
 

有关FileUpload组件的使用和调试的经验<o:p></o:p>

分享到:
评论
2 楼 joachimz 2007-04-05  
Spring的multipart的封装应该更简洁,易用。而且非常方便在common-upload与cos之间切换。
1 楼 zinking 2007-04-04  
不错,讲的很详细

相关推荐

    功能强大的文件上传组件

    在实际开发中,HTML5的文件上传组件可能还会结合其他技术,如使用`FormData`封装上传数据,`XMLHttpRequest`或`fetch` API发送异步请求,以及使用`Blob`对象进行文件的切片上传和断点续传等高级功能。同时,为了提高...

    java文件上传组件包

    "java文件上传组件包"正是这样一套工具集,旨在简化Java开发中的文件上传流程。 在Java中处理文件上传,主要涉及以下知识点: 1. **Servlet API**:在服务器端,Servlet API是处理HTTP请求的基础。`javax.servlet....

    ASP.NET 大文件上传组件

    ASP.NET大文件上传组件是为了解决在ASP.NET应用程序中处理大文件上传的问题而设计的。在传统的ASP.NET环境中,由于HTTP协议的限制,单个请求的大小通常被限制在4MB左右,这对于处理大文件(如高清视频、大型文档等)...

    FLASH大文件上传组件

    Flash大文件上传组件的核心原理是利用Flash的ActionScript语言,通过Flash Player与服务器通信。它通常会使用XMLSocket或HTTPSocket等API来建立持久连接,实现文件的分块传输。同时,Flash的本地文件访问权限使得它...

    性能最好的Java文件上传组件

    总结起来,"性能最好的Java文件上传组件"通常是指能够高效、稳定地与云存储服务进行交互的工具,如基于腾讯云COS的Java SDK。这样的组件不仅可以提高文件上传的效率,还能带来更好的可维护性和可扩展性,是现代Web...

    ntsky文件上传组件

    7. **服务器端接口**:ntsky文件上传组件需要与服务器端接口配合,完成文件的实际存储。服务器端可能采用PHP、Python、Node.js等后端语言实现接收和保存文件的逻辑。 8. **安全性**:组件应考虑文件上传的安全性,...

    HTTP文件上传组件

    2、该图片上传组件支持图片编辑(水平镜像,垂直镜像,旋转等),支持图片全屏预览. 3、是一个采用ATL+WTL编写超级轻量级组件,运行不依赖MFC库,UImageUploaderD.dll(Release版本)只有164Kb,打成cab包之后会更小. ...

    Vuejs的文件上传组件

    为了简化这些功能,可以考虑使用第三方库,如vue-dropzone、vue-uploader等,它们提供了丰富的配置选项和事件机制,能帮助你快速构建功能完善的文件上传组件。 总结,Vue.js的文件上传组件涉及到HTML5的文件API、...

    免费大文件HTTP上传组件

    支持断点续传和超过1G大文件的HTTP上传组件(Active控件)。 主要特点: 1、文件上传完全采用HTTP协议. 用户使用浏览器就可以上传大文件到服务器(支持上传超过1G的文件) 2、支持断点续传, 用户可以自己选择采用断点...

    文件上传与下载组件

    "文件上传与下载组件"是IT领域中一个关键的功能模块,尤其在Web应用程序中,它为用户提供了方便的数据交互方式。fileUpDo组件是专为此目的设计的,它集成了文件上传和下载的核心功能,使得开发者能够快速地在自己的...

    拓网超大文件上传组件

    拓网大文件上传组件是基于Silverlight框架,采用多线程、断点续传技术开发的一套大文件在线上传WEB组件,是国内首个实现在线WEB断点续传的解决方案。使用本组件可以轻松将几G文件上传到服务器,良好的兼容性和通用的...

    文件批量上传 图片批量上传 组件,PHP使用

    还可以使用队列服务,如RabbitMQ或Beanstalkd,将文件上传任务分发到后台处理。 7. **错误处理与反馈**:良好的用户体验需要在上传过程中提供清晰的错误提示。可以设计不同状态的反馈,如成功上传、部分文件上传...

    批量上传、断点续传 上传组件

    3、你可以设定文件上传到服务器后的存放路径。 4、设置不允许上传的文件的扩展名。 5、上传过程中,进度条实时提示进度。并可以显示每个上传文件的详细进度信息。 6、上传过程中,点击取消按钮,即可删除正在...

    大文件上传组件

    标题中的“大文件上传组件”指的是在网络应用中用于处理大体积文件上传的一种技术或软件工具。在现代Web开发中,由于网络带宽的增加和用户对上传大文件(如高清视频、大型文档或图片库)的需求,大文件上传组件成为...

    纵横HTTP文件上传组件 v6.0.0.28

    3、支持大文件上传,一次可以上传多个文件。上传时有详细的状态显示(包括单个文件进度,整体进度,传输速率,剩余时间等)。 4、支持各种代理(HTTP, Socket4, Socket5等) 5、支持批量文件上传,用户可以一次性...

    文件上传断点续传协议

    文件上传断点续传协议是一种高效且可靠的文件上传机制,尤其适用于处理大文件和网络不稳定的情况。该协议的实现基于Python和JavaScript,采用一发一回的通信方式,确保了客户端与服务器之间的交互效率和准确性。它...

    艾恩ASP文件上传组件v9.4.10

    在实际应用中,使用艾恩ASP文件上传组件时,开发者需要注意以下几点: 1. **安全性**:确保上传的文件类型和大小受到限制,防止恶意用户上传木马或大文件占用服务器资源。 2. **错误处理**:处理上传过程中可能...

    Flex文件上传组件

    Flex文件上传组件是一种基于Adobe Flex技术的用户界面组件,用于在Web应用中实现文件上传功能。Flex是一个开源的RIA(富互联网应用)框架,它允许开发者创建交互性强、图形丰富的Web应用。在这个组件中,用户可以...

    支持断点续传的上传组件FileUpload

    在本文中,我们将深入探讨支持断点续传的上传组件——FileUpload,以及如何利用它来实现高效、可靠的文件上传。 FileUpload组件是专为.NET平台设计的,它集成了ASP.NET框架,能够提供服务器端的稳定支持。通过这个...

Global site tag (gtag.js) - Google Analytics