如何实现文件上传
开发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 代码
- <!DOCTYPE HTML PUBLIC -
- http:
- <html>
- <head>
- <meta http-equiv=Content-Type content=text/html; charset=gb2312>
- <title>实现文件上传的一个例子程序</title>
- </head>
- <body>
- <div align="center">
- <!-- enctype参数很重要,当向服务器传送如片或文件这样包含非ASCII字符或二进制数的数据时,跟据RFC1867规定必须使用"mutiplepart/form-data"内容类型-->
- </div>
- <form name=form1 method=post enctype=multipart/form-data action=upload.jsp>
- <div align="center">
- <table width="255" border="1" >
- <tr>
- <td><input name=file12 type=file></td>
- </tr>
- <tr>
- <td><input name=file2 type=file></td>
- </tr>
- <tr>
- <td><input name=file3 type=file></td>
- </tr>
- <tr>
- <td align="center"><input type=submit name=Submit value=提交></td>
- </tr>
- </table>
- </div>
- </form >
- </body>
- </html>
3. 实现上传文件功能可以写一个Servlet, 这里简单起见,写成一个upload.jsp文件:
jsp 代码
- <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>实现文件上传功能 </title>
- </head><%@page import="com.oreilly.servlet.MultipartRequest" %>
- <%@page contentType="text/html; charset=gb2312" %>
- <%
-
- String saveDirectory = "f:/uploadfiles";
-
- int maxPostSize = 3 * 5 * 1024 * 1024 ;
-
- MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize, "gb2312");
- %>
4. 将以上两个文件放到tomcat安装目录\webapps目录下的一个文件夹如uploadExample下即可<o:p></o:p>
附:(http://blog.csdn.net/hdhero/archive/2005/03/22/326405.aspx)
一.SmartUpload组件例子代码:<o:p></o:p>
- <%@ page contentType="text/html;charset=gb2312"%>
- <%@ page import="java.sql.*"%>
- <%@ page import="com.jspsmart.upload.*" %>
- <%
-
- 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或内存占用过高的问题.只有重新启动容器才能恢复正常! <o:p> </o:p>
二.commons-fileupload组件<o:p></o:p>
- <%@ page language=“java”contentType=“text/html;charset=GBK”%>
- <%@ page import=“java.util.*”%>
- <%@ page import=“org.apache.commons.fileupload.*”%>
- <html>
- <head>
- <title>文件上传</title>
- </head> &nbs
分享到:
相关推荐
本教程将详细讲解如何使用.NET MVC实现文件上传功能,这是一个常见的Web开发需求。 首先,我们需要理解.NET MVC中的控制器(Controller)是处理用户请求的地方。在文件上传场景中,控制器会接收HTTP POST请求,该...
总的来说,Spring Boot提供了一种简洁的方式来实现文件上传和下载功能,结合Thymeleaf和其他Spring组件,可以快速构建出功能完善的Web应用。通过合理的接口设计和实现,我们可以实现可扩展且易于维护的文件存储服务...
总结起来,"wcf+wpf实现文件上传下载实例"是一个结合了WCF服务和WPF客户端的应用,它展示了如何在分布式环境中安全、高效地处理文件操作。这个实例涵盖了服务端契约定义、客户端调用、文件流处理、UI交互以及安全...
在JavaScript(简称js)中实现文件上传功能是Web开发中的常见需求,特别是在现代网页应用中,用户可能需要上传图片、文档等数据。本教程将详细讲解如何利用js实现这一功能,以及涉及到的关键技术和库。 首先,`js...
实现文件上传功能时,通常会使用Struts2的FileUpload拦截器。这个拦截器允许用户通过HTTP POST请求发送文件数据。在Struts2的配置文件(struts.xml)中,你需要添加对应的拦截器栈,并在Action类中定义一个字段来...
JSP 实现文件上传下载 在本文中,我们将学习如何使用 JSP 实现文件上传和下载功能。在这个过程中,我们将使用 Apache 的 Commons FileUpload 和 Commons IO 两个库来处理文件上传和下载。 首先,让我们了解一下...
本文将深入探讨如何在WebAPI中实现文件上传功能,并介绍如何在MVC应用程序中调用这个API。 一、WebAPI中的文件上传 1. **配置路由**:首先,我们需要在WebAPI的`WebApiConfig.cs`文件中设置允许接收多部分/表单...
本文实例为大家分享了JSP+Servlet实现文件上传到服务器功能的具体代码,供大家参考,具体内容如下 项目目录结构大致如下: 正如我在上图红线画的三个东西:Dao、service、servlet 这三层是主要的结构,类似 MVC ...
在本文中,我们将深入探讨如何使用HttpURLConnection实现文件上传,同时也会涉及普通参数的传递。 首先,我们需要理解HTTP请求的基本结构。HTTP请求通常由以下几个部分组成:请求行、请求头、空行和请求体。在文件...
"C#实现文件上传下载源代码" 本文将详细介绍使用C#实现文件上传和下载功能的源代码。该源代码使用ASP.NET框架,实现了文件上传、下载和文件夹管理功能。 C#文件上传下载源代码解析 1. 文件上传功能实现 在源代码...
利用java图形化界面和网络编程相结合实现的--文件上传。 运行步骤: (1)分别运行工程两个包中的两个.java文件(UploadClient.java和UploadServer.java)分别会弹出“上传客服端”和“上传服务器”两个窗口。 ...
"JSP实现文件上传与下载" JSP(Java Server Pages)是一种动态网页技术,用于开发基于Web的应用程序。JSP技术可以和其他Java技术集成,实现复杂的Web应用程序。下面是JSP实现文件上传与下载的知识点总结: 一、JSP...
### JSP 实现文件上传与下载功能详解 #### 一、引言 在现代Web应用开发中,文件的上传和下载是一项基本而重要的功能。JavaServer Pages (JSP) 是一种广泛使用的服务器端脚本技术,它允许开发者创建动态网页,并且...
在本项目中,"PHP 简单实现文件上传、保存、下载的功能(云盘)",我们主要关注的是如何利用PHP构建一个基本的云存储服务,让用户能够在自己的账户空间内进行文件的操作。以下是对涉及的技术点的详细解释: 1. **PHP*...
在这个场景中,我们讨论的是如何使用Java的Socket来实现文件上传功能,即从客户端将文件发送到服务器,然后保存到服务器的数据库中。这个过程涉及到多个关键知识点,下面我们将详细探讨。 1. **Java Socket基础**:...
基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于...
在本文中,我们将深入探讨这两个组件以及如何将它们整合以实现文件上传。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它提供了一种组织和管理Web应用的方式,使得开发者可以更...
### C#实现文件上传的关键知识点 #### 一、概述 在C#中实现文件上传是一项常见但非常重要的功能,尤其对于Web应用来说更是如此。本文将深入探讨如何使用C#来实现文件上传,并重点关注以下几个方面:如何利用C#进行...
Flash结合PHP实现文件上传功能,程序配置说明: 1.php文件路径 upload.fla 文件中第一帧第代码第14行:urlRequest.url = "http://localhost/phpFlash/upload.php"; 此路径改为您的本地环境配置路径,注意,...
在本文中,我们将深入探讨使用Struts2实现文件上传和下载的各种方案。 ### 文件上传方案 #### 1. 使用Struts2进行文件普通上传 文件上传的核心是处理`multipart/form-data`类型的表单数据。Struts2通过`Struts2-...