1. 首先需要下载需要的组件。
下载commons-fileupload-1.2.1-bin.zip,下载网址:
http://commons.apache.org/downloads/download_fileupload.cgi
下载commons-io-1.4-bin.zip,下载网址:
http://commons.apache.org/downloads/download_io.cgi
2. 用开源的FileUpload组件,可以很方便的给自己的系统添加功能强大的文件上传模块。下图为文件上传的基本流程图。
3. 将commons-fileupload-1.2.1-bin.zip包中的commons-fileupload-1.2.1.jar文件和commons-io-1.4-bin.zip包中的commons-io-1.4.jar文件拷贝到web工程下的WEB-INF\lib目录下。
4. 在服务器端创建处理文件上传的Servlet类。源代码如下:
Java代码
-
packagecom.bjsxt.shopping.servlet;
-
importjava.io.File;
-
importjava.io.IOException;
-
importjava.io.PrintWriter;
-
importjava.util.Iterator;
-
importjava.util.List;
-
importjavax.servlet.ServletException;
-
importjavax.servlet.http.HttpServlet;
-
importjavax.servlet.http.HttpServletRequest;
-
importjavax.servlet.http.HttpServletResponse;
-
importorg.apache.commons.fileupload.FileItem;
-
importorg.apache.commons.fileupload.FileUploadException;
-
importorg.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
-
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
-
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
-
publicclassFileUploadServletextendsHttpServlet
- {
-
privatestaticfinallongserialVersionUID=1L;
-
publicFileUploadServlet()
- {
-
super();
- }
-
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
- {
-
this.doPost(request,response);
- }
-
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException
- {
-
request.setCharacterEncoding("utf-8");
-
finallongMAX_SIZE=300*1024*1024;
-
-
finalString[]allowedExt=newString[]{"jpg","jpeg","gif","txt","doc","mp3","wma","m4a","rar","zip"};
-
response.setContentType("text/html");
-
-
response.setCharacterEncoding("UTF-8");
-
-
DiskFileItemFactorydfif=newDiskFileItemFactory();
-
dfif.setSizeThreshold(4096);
-
dfif.setRepository(newFile(request.getRealPath("/")+"ImagesUploadTemp"));
-
-
ServletFileUploadsfu=newServletFileUpload(dfif);
-
- sfu.setSizeMax(MAX_SIZE);
- PrintWriterout=response.getWriter();
-
-
ListfileList=null;
-
try
- {
- fileList=sfu.parseRequest(request);
-
}catch(FileUploadExceptione)
-
{
-
if(einstanceofSizeLimitExceededException)
- {
-
out.println("文件尺寸超过规定大小:"+MAX_SIZE+"字节<p/>");
-
out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
-
return;
- }
- e.printStackTrace();
- }
-
-
if(fileList==null||fileList.size()==0)
- {
-
out.println("请选择上传文件<p/>");
-
out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
-
return;
- }
-
- IteratorfileItr=fileList.iterator();
-
-
while(fileItr.hasNext())
- {
-
FileItemfileItem=null;
-
Stringpath=null;
-
longsize=0;
-
- fileItem=(FileItem)fileItr.next();
-
-
if(fileItem==null||fileItem.isFormField())
- {
-
continue;
- }
-
- path=fileItem.getName();
-
- size=fileItem.getSize();
-
if("".equals(path)||size==0)
- {
-
out.println("请选择上传文件<p/>");
-
out.println("<ahref=\"./admin/manager/productlist.jsp\">返回</a>");
-
return;
- }
-
-
Stringt_name=path.substring(path.lastIndexOf("\\")+1);
-
-
Stringt_ext=t_name.substring(t_name.lastIndexOf(".")+1);
-
-
intallowFlag=0;
-
intallowedExtCount=allowedExt.length;
-
for(;allowFlag<allowedExtCount;allowFlag++)
- {
-
if(allowedExt[allowFlag].equals(t_ext))
-
break;
- }
-
if(allowFlag==allowedExtCount)
- {
-
out.println("请上传以下类型的文件<p/>");
-
for(allowFlag=0;allowFlag<allowedExtCount;allowFlag++)
-
out.println("*."+allowedExt[allowFlag]+"");
-
out.println("<p/><ahref=\"./admin/manager/productlist.jsp\">返回</a>");
-
return;
- }
-
-
-
-
-
-
- Stringfilename=t_name;
- System.out.println(t_name);
-
try
- {
-
-
fileItem.write(newFile("C:\\upload\\"+filename));
-
-
out.println("文件上传成功.已保存为:"+filename+"文件大小:"+size+"字节<p/>");
-
out.println("<ahref=\"./admin/manager/productlist.jsp\">继续上传</a>");
-
}catch(Exceptione)
- {
- e.printStackTrace();
- }
- }
- }
- }
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public FileUploadServlet() {
super();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
final long MAX_SIZE = 300 * 1024 * 1024;// 设置上传文件最大值
// 允许上传的文件格式的列表
final String[] allowedExt = new String[] {"jpg", "jpeg", "gif", "txt",
"doc","mp3", "wma", "m4a","rar","zip" };
response.setContentType("text/html");
// 设置字符编码为UTF-8, 统一编码,处理出现乱码问题
response.setCharacterEncoding("UTF-8");
// 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
DiskFileItemFactory dfif = new DiskFileItemFactory();
dfif.setSizeThreshold(4096);// 设置上传文件时用于临时存放文件的内存大小,这里是4K.多于的部分将临时存在硬盘
dfif.setRepository(new File(request.getRealPath("/")
+ "ImagesUploadTemp"));// 设置存放临时文件的目录,web根目录下的ImagesUploadTemp目录
// 用以上工厂实例化上传组件
ServletFileUpload sfu = new ServletFileUpload(dfif);
// 设置最大上传大小
sfu.setSizeMax(MAX_SIZE);
PrintWriter out = response.getWriter();
// 从request得到所有上传域的列表
List fileList = null;
try {
fileList = sfu.parseRequest(request);
} catch (FileUploadException e) {// 处理文件尺寸过大异常
if (e instanceof SizeLimitExceededException) {
out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
out
.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
return;
}
e.printStackTrace();
}
// 没有文件上传
if (fileList == null || fileList.size() == 0) {
out.println("请选择上传文件<p />");
out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
return;
}
// 得到所有上传的文件
Iterator fileItr = fileList.iterator();
// 循环处理所有文件
while (fileItr.hasNext()) {
FileItem fileItem = null;
String path = null;
long size = 0;
// 得到当前文件
fileItem = (FileItem) fileItr.next();
// 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
if (fileItem == null || fileItem.isFormField()) {
continue;
}
// 得到文件的完整路径
path = fileItem.getName();
// 得到文件的大小
size = fileItem.getSize();
if ("".equals(path) || size == 0) {
out.println("请选择上传文件<p />");
out
.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
return;
}
// 得到去除路径的文件名
String t_name = path.substring(path.lastIndexOf("\\") + 1);
// 得到文件的扩展名(无扩展名时将得到全名)
String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
// 拒绝接受规定文件格式之外的文件类型
int allowFlag = 0;
int allowedExtCount = allowedExt.length;
for (; allowFlag < allowedExtCount; allowFlag++) {
if (allowedExt[allowFlag].equals(t_ext))
break;
}
if (allowFlag == allowedExtCount) {
out.println("请上传以下类型的文件<p />");
for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
out.println("*." + allowedExt[allowFlag]
+ "");
out
.println("<p /><a href=\"FileUpload.html\" target=\"_top\">返回</a>");
return;
}
long now = System.currentTimeMillis();
// 根据系统时间生成上传后保存的文件名
String prefix = String.valueOf(now);
// 保存的最终文件完整路径,保存在web根目录下的ImagesUploaded目录下
// String u_name = request.getRealPath("/") + "ImagesUploaded/"
// + prefix + "." + t_ext;
String filename = prefix + "." + t_ext;
try {
// 保存文件到C:\\upload目录下
fileItem.write(new File("C:\\upload\\"+filename));
System.out.println(filename);
out.println("文件上传成功. 已保存为: " + prefix + "." + t_ext
+ " 文件大小: " + size + "字节<p />");
out
.println("<a href=\"FileUpload.html\" target=\"_top\">继续上传</a>");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
5. 在客户端创建上传文件页面
分享到:
相关推荐
本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** Apache Commons FileUpload是Apache软件基金会开发的一个开源组件,专门处理HTTP...
在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload库为开发者提供了方便、灵活的文件上传解决方案。本教程将深入讲解如何使用`commons-fileupload`库处理中文乱码问题以及实现多文件上传。 ...
本实例将深入讲解如何使用Apache FileUpload进行文件上传操作。 1. **Apache FileUpload简介** Apache Commons FileUpload是Apache软件基金会的一个子项目,它提供了处理HTTP请求中multipart/form-data类型的工具...
.NET 文件上传文件控件(FileUpload)使用实例 .NET Framework 提供了一个名为 FileUpload 的控件,用于实现文件上传功能。本文将通过一个简单的图片上传程序,来演示 FileUpload 控件的使用实例。 在 ASP.NET 中...
FileUpload 文件上传组件的ASP.NET实例,基于主副窗口的上传程序,利用线程提升上传速度。本插件可支持多文件上传,为了提升上传体验,这里使用了AjaxControlToolkit.dll、MattBerseth.WebControls.AJAX.dll两个组件...
在Web开发中,文件上传功能是常见的需求,而FileUpload组件提供了方便、高效的解决方案。 **文件上传的原理分析** 文件上传的核心在于HTTP协议中的POST请求。当用户通过表单提交包含文件的表单时,表单的`method`...
在这个"C# .NET FileUpload 多文件上传例子"中,我们将探讨两种主要的方法,帮助你理解和掌握这一关键功能。 首先,我们要知道ASP.NET中的`<asp:FileUpload>`控件是实现文件上传的核心组件。它可以允许用户从本地...
"commons-fileupload实现jsp上传实例(源码)" 这个标题表明了我们讨论的主题是关于使用Apache Commons FileUpload库在JavaServer Pages (JSP)中实现文件上传的功能,并且提供了源代码作为参考。Apache Commons ...
这个库为Java开发者提供了一个简单而强大的API,能够方便地实现文件上传功能。 `commons-fileupload`是Apache Commons项目的一部分,它的主要功能包括: 1. **解析多部分HTTP请求**:在HTTP协议中,文件上传通常...
Apache Commons FileUpload是Apache组织的一个子项目,专注于处理HTTP文件上传。这个组件提供了一个简洁的API,使得开发者能够轻松地在Java应用中处理由浏览器发送的多部分(multipart)HTTP请求,即通常的文件上传...
1. Commons FileUpload:这是Apache的一个开源项目,提供了处理HTTP请求中文件上传的部分,使得在Java环境中处理文件上传变得简单。 2. JSP上传实例:这表明源码中包含了一个完整的JSP文件上传示例,涵盖了从前端...
原理: FileUpload实现上传功能, UploadListener 监听上传进度, DWR push (Reverse Ajax) 进度信息并更新页面, 实现无刷新多文件上传 运行环境: Tomcat 5/6 测试通过 说明:累计上传文件不超过10M(可以更改...
本文将深入探讨如何使用`commons-fileupload-1.2.jar`这个组件来实现文件上传的实例。 Apache Commons FileUpload是Apache软件基金会开发的一个开源项目,它的主要目标是提供一个简单且可扩展的API,用于处理HTTP...
本文将详细介绍如何利用这个组件实现文件上传,并通过一个简单的实例来说明。 Apache Commons FileUpload组件是Apache Commons项目的一部分,它为Servlet环境提供了处理多部分HTTP请求(即文件上传请求)的功能。多...
"jsp+servlet+fileupload文件上传" 这个标题表明这是一个关于使用Java Web技术进行文件上传的教程。JSP (JavaServer Pages) 是一种动态网页技术,Servlet是Java EE中的一个核心组件,常用于处理HTTP请求。FileUpload...
Apache Commons FileUpload 是一款非常实用且功能强大的文件上传组件,广泛应用于Java Web项目中。它极大地简化了原本复杂繁琐的文件上传过程,使得开发者能够更加专注于业务逻辑的实现。本文档旨在通过详细解读...
总结来说,Apache Commons FileUpload是一个强大的工具,使得在Java Web应用中处理文件上传变得简单而安全。配合Commons Lang和Commons IO,开发者可以更高效地管理上传文件的生命周期,从解析请求到存储文件,再到...
***的FileUpload类是.NET框架提供的用于上传文件到...通过上述知识点的介绍,我们可以了解到在***中使用FileUpload类进行文件上传的基本方法和实现思路。实际开发时,还需要根据具体需求对上传流程进行优化和安全加固。
"FileUpload文件上传"这个主题聚焦于如何在Java环境中实现这一功能。PPT讲解和对应的jar包提供了理论知识和实践工具,帮助开发者理解并实现在自己的项目中处理文件上传。 首先,我们要了解文件上传的基本流程。当...