`

如何实现文件上传

阅读更多

    如何实现文件上传

       开发Web程序通常需要文件上传功能,现在有很多免费的文件上传组件,其中使用比较多的也是非常著名的有:

       FileUpload    (http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi

       Cos               (http://www.servlets.com/cos/index.html) 基于javabean组件

      SmartUpload  (http://wwww.jspsmart.com) 完全基于JSP来处理上传的组件        

      以下部分内容来自http://www.blogjava.net/caixuetao/articles/30841.html

     它们的性能比较如下:

2M

 

1

2

3

4

平均

Cos

297

203

234

245

245

FileUpload

281

312

281

312

297

SmartUpload

531

594

485

532

536

 

20M

 

1

2

3

4

平均

Cos

2562

2109

2719

2172

2391

FileUpload

4062

4140

5360

3922

4371

SmartUpload

3453

3094

3078

3547

3293

 

45M

 

1

2

3

4

平均

Cos

4860

4844

5125

5171

5000

FileUpload

9000

8391

10375

10078

9461

SmartUpload

8265

9187

8672

8856

8745

 

200M

 

1

2

3

4

平均

Cos

55813

52282

54796

51187

53520

FileUpload

76343

68531

80954

79031

76215

SmartUpload

内存堆栈溢出

 

 

 

 

 

      从上述的表格对比中可以看出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<o:p></o:p>

html 代码
  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文件:

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下即可<o:p></o:p>

http://blog.csdn.net/hdhero/archive/2005/03/22/326405.aspx

一.SmartUpload组件例子代码:<o:p></o:p>

  1. <%@ page contentType="text/html;charset=gb2312"%>   
  2. <%@ page import="java.sql.*"%>   
  3. <%@ page import="com.jspsmart.upload.*" %>   
  4. <%   
  5.    //实例化上载bean   
  6.     SmartUpload mySmartUpload=new SmartUpload();   
  7.     //初始化   
  8.     mySmartUpload.initialize(pageContext);    
  9.     //设置上载的最大值,注意:如果这里设置过大会出现问题!   
  10.     mySmartUpload.setMaxFileSize(500 * 1024*1024);   
  11.     //上载文件   
  12.     mySmartUpload.upload();   
  13.    //循环取得所有上载的文件   
  14.    for (int i=0;i<mySmartUpload.getFiles().getCount();i++){   
  15.    //取得上载的文件   
  16.    com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);   
  17.    if (!myFile.isMissing())   
  18.     {   
  19.    //取得上载的文件的文件名   
  20.     String myFileName=myFile.getFileName();   
  21.     //取得不带后缀的文件名   
  22.     String  suffix=myFileName.substring(0,myFileName.lastIndexOf('.'));   
  23.     //取得后缀名   
  24.     String  ext= mySmartUpload.getFiles().getFile(0).getFileExt();     
  25.     //取得文件的大小     
  26.     int fileSize=myFile.getSize();   
  27.     //保存路径   
  28.     String aa=getServletContext().getRealPath("/")+"jsp\\";  
  29.     String trace=aa+myFileName;  
  30.     //取得别的参数  
  31.     String explain=(String)mySmartUpload.getRequest().getParameter("text");  
  32.     String send=(String)mySmartUpload.getRequest().getParameter("send");   
  33.     //将文件保存在服务器端    
  34.     myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL);   
  35.     %>   

 注意使用smartupload上传过大文件,或者多文件的时候可能出现CPU或内存占用过高的问题.只有重新启动容器才能恢复正常<o:p>  </o:p>

二.commons-fileupload组件<o:p></o:p>

  1. <%@ page language=“java”contentType=“text/html;charset=GBK”%>   
  2. <%@ page import=“java.util.*”%>   
  3. <%@ page import=“org.apache.commons.fileupload.*”%>   
  4. <html>   
  5. <head>   
  6. <title>文件上传</title>   
  7. </head>  &nbs
分享到:
评论
9 楼 penghao122 2007-05-08  
为什么有时候用smartUpload内存会100%呢
8 楼 huangtut 2007-05-08  
<br/>
<strong>Cecily 写道:</strong><br/>
<div class='quote_div'><font>呵呵  总结的很仔细啊 支持一下.我用SmartUpload做上传的时候确实觉得不好用于大数据量的传输.</font></div>
<p> </p>
<p> </p>
<p>支持一下,以前一个项目smartUpload大于20M时经常出现无响应的状况,的确让人苦恼。<br/>
<br/>
<br/>
<br/>
</p>
7 楼 andyandyandy 2007-03-27  
以前都用fileupload,有机会看看cos,不知道lz测试的机器配置怎么样
6 楼 cozone_柯中 2007-03-27  
NoName 写道
首先还是表示感谢,顶一下,Cos 以前没听说过,这下又多了个选择


确实,支持以下
5 楼 NoName 2007-03-26  
首先还是表示感谢,顶一下,Cos 以前没听说过,这下又多了个选择
4 楼 ahuaxuan 2007-03-07  
这个测试结果是不是有点误导人,不同的服务器应该是不一样的,这个测试是在什么服务器上做的? 服务器的最大内存设置是多少?这些最起码应该给出来,这样才全面一点
3 楼 LucasLee 2007-03-07  
我觉得总结的有一些疑问。
上传文件不仅是耗时问题,还有一个耗内存的问题,这一点在大文件处理时很重要。
似乎没有考虑,如果考虑这一点,可能那个处理时间也有变化了。
2 楼 ddandyy 2007-03-07  
那堆框是怎么回事
1 楼 Cecily 2007-03-07  
<font>呵呵  总结的很仔细啊 支持一下.我用SmartUpload做上传的时候确实觉得不好用于大数据量的传输.</font>

相关推荐

    .NET MVC实现文件上传

    本教程将详细讲解如何使用.NET MVC实现文件上传功能,这是一个常见的Web开发需求。 首先,我们需要理解.NET MVC中的控制器(Controller)是处理用户请求的地方。在文件上传场景中,控制器会接收HTTP POST请求,该...

    SpringBoot实现文件上传和下载.docx

    总的来说,Spring Boot提供了一种简洁的方式来实现文件上传和下载功能,结合Thymeleaf和其他Spring组件,可以快速构建出功能完善的Web应用。通过合理的接口设计和实现,我们可以实现可扩展且易于维护的文件存储服务...

    wcf+wpf实现文件上传下载实例

    总结起来,"wcf+wpf实现文件上传下载实例"是一个结合了WCF服务和WPF客户端的应用,它展示了如何在分布式环境中安全、高效地处理文件操作。这个实例涵盖了服务端契约定义、客户端调用、文件流处理、UI交互以及安全...

    js实现文件上传

    在JavaScript(简称js)中实现文件上传功能是Web开发中的常见需求,特别是在现代网页应用中,用户可能需要上传图片、文档等数据。本教程将详细讲解如何利用js实现这一功能,以及涉及到的关键技术和库。 首先,`js...

    tomcat 实现文件上传下载

    实现文件上传功能时,通常会使用Struts2的FileUpload拦截器。这个拦截器允许用户通过HTTP POST请求发送文件数据。在Struts2的配置文件(struts.xml)中,你需要添加对应的拦截器栈,并在Action类中定义一个字段来...

    利用jsp实现文件上传下载

    JSP 实现文件上传下载 在本文中,我们将学习如何使用 JSP 实现文件上传和下载功能。在这个过程中,我们将使用 Apache 的 Commons FileUpload 和 Commons IO 两个库来处理文件上传和下载。 首先,让我们了解一下...

    .NET webapi实现文件上传功能

    本文将深入探讨如何在WebAPI中实现文件上传功能,并介绍如何在MVC应用程序中调用这个API。 一、WebAPI中的文件上传 1. **配置路由**:首先,我们需要在WebAPI的`WebApiConfig.cs`文件中设置允许接收多部分/表单...

    JSP+Servlet实现文件上传到服务器功能

    本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC ...

    Java自带的HttpURLConnection访问接口实现文件上传

    在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要理解HTTP请求的基本结构。HTTP请求通常由以下几个部分组成:请求行、请求头、空行和请求体。在文件...

    C#实现文件上传下载源代码

    "C#实现文件上传下载源代码" 本文将详细介绍使用C#实现文件上传和下载功能的源代码。该源代码使用ASP.NET框架,实现了文件上传、下载和文件夹管理功能。 C#文件上传下载源代码解析 1. 文件上传功能实现 在源代码...

    java图形化实现文件上传

    利用java图形化界面和网络编程相结合实现的--文件上传。 运行步骤: (1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 ...

    JSP实现文件上传与下载.pdf

    "JSP实现文件上传与下载" JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。JSP技术可以和其他Java技术集成,实现复杂的Web应用程序。下面是JSP实现文件上传与下载的知识点总结: 一、JSP...

    jsp实现文件上传下载功能

    ### JSP 实现文件上传与下载功能详解 #### 一、引言 在现代Web应用开发中,文件的上传和下载是一项基本而重要的功能。JavaServer Pages (JSP) 是一种广泛使用的服务器端脚本技术,它允许开发者创建动态网页,并且...

    PHP 简单实现文件上传、保存、下载的功能(云盘)

    在本项目中,"PHP 简单实现文件上传、保存、下载的功能(云盘)",我们主要关注的是如何利用PHP构建一个基本的云存储服务,让用户能够在自己的账户空间内进行文件的操作。以下是对涉及的技术点的详细解释: 1. **PHP*...

    JAVA Socket编程实现文件上传

    在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库中。这个过程涉及到多个关键知识点,下面我们将详细探讨。 1. **Java Socket基础**:...

    基于Python+Django简单实现文件上传下载功能源码.zip

    基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于...

    Struts+swfupload实现文件上传功能

    在本文中,我们将深入探讨这两个组件以及如何将它们整合以实现文件上传。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种组织和管理Web应用的方式,使得开发者可以更...

    C#实现文件上传

    ### C#实现文件上传的关键知识点 #### 一、概述 在C#中实现文件上传是一项常见但非常重要的功能,尤其对于Web应用来说更是如此。本文将深入探讨如何使用C#来实现文件上传,并重点关注以下几个方面:如何利用C#进行...

    Flash结合PHP实现文件上传功能.rar

    Flash结合PHP实现文件上传功能,程序配置说明:  1.php文件路径  upload.fla 文件中第一帧第代码第14行:urlRequest.url = "http://localhost/phpFlash/upload.php";  此路径改为您的本地环境配置路径,注意,...

    使用Struts2实现文件上传和下载的所有方案

    在本文中,我们将深入探讨使用Struts2实现文件上传和下载的各种方案。 ### 文件上传方案 #### 1. 使用Struts2进行文件普通上传 文件上传的核心是处理`multipart/form-data`类型的表单数据。Struts2通过`Struts2-...

Global site tag (gtag.js) - Google Analytics