首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > Apache >

JSP下传文件Servlet(Apache fileUpload)同时text文本

2012-11-06 
JSP上传文件Servlet(Apache fileUpload)同时text文本以Apache组织的commons项目中的FileUpload项目做为jsp

JSP上传文件Servlet(Apache fileUpload)同时text文本

以Apache组织的commons项目中的FileUpload项目做为jsp的文件上传组件。

?

在开始之前你要准备以下几个东西:
1. commons-FileUpload ?包?
? 下载地址:http://commons.apache.org/fileupload/
2. commons-IO ?包?
? 下载地址:http://commons.apache.org/io/
3. Commons-BeanUtils ?包?
? 下载地址:http://commons.apache.org/beanutils/

?

准备工作完成就开始了:

?

1、新建一个WEB项目upload;

?

2、把下载好了的jar包复制到项目的WEB-INF/lib目录下;


3、新建或修改JSP文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>This is my upload JSP page.<br><form name="upform" action="UploadServlet" method="POST" enctype="multipart/form-data"><input type="file" name="file1" id="file1" /><br /><input type="file" name="file2" if="file2" /><br /><input type="file" name="file3" id="file3" /><br /><input type="text" name="text1" id="text1" /><br /><input type="submit" value="Submit" /><input type="reset" /></form></body></html>

?

?

上面有几个要注意的地方:

a、method在这时必须是post的;

b、enctype="multipart/form-data"使表单提交的流而不是表单文本。

?

4、书写UploadServlet.java

package demo.servlet;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemIterator;import org.apache.commons.fileupload.FileItemStream;import org.apache.commons.fileupload.ProgressListener;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.util.Streams;/** * Servlet implementation class for Servlet: UploadServlet */public class UploadServlet extends javax.servlet.http.HttpServlet implementsjavax.servlet.Servlet {/** 初始化上传文件的临时存放目录 */File tmpDir = null;/** 初始化上传文件后的保存目录 */File saveDir = null;public UploadServlet() {super();}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");try {// 检查是否是文件上传类型的请求 enctype="multipart/form-data"if (ServletFileUpload.isMultipartContent(request)) {// 创建一个基于磁盘的文件项目DiskFileItemFactory factory = new DiskFileItemFactory();factory.setRepository(tmpDir);// 指定上传文件的临时目录factory.setSizeThreshold(1024000);// 指定在内存中缓存数据大小,单位为byte// 创建一个新的文件上传处理程序ServletFileUpload upload = new ServletFileUpload(factory);upload.setFileSizeMax(5000000);// 指定单个上传文件的最大尺寸upload.setSizeMax(10000000);// 指定一次请求上传多个文件的总尺寸// 解析request请求,并执行相应操作FileItemIterator fileItems = upload.getItemIterator(request);while (fileItems.hasNext()) {// 从集合中获得一个文件流FileItemStream fileItemStream = fileItems.next();String name = fileItemStream.getFieldName();// 界面document的name值    InputStream stream = fileItemStream.openStream();    // 过滤掉表单中的非文件域if (!fileItemStream.isFormField() && fileItemStream.getName().length() > 0) {// 获得上传文件的文件名String fileName = fileItemStream.getName();// 获得文件输入流BufferedInputStream in = new BufferedInputStream(stream);// 获得文件输出流BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+ System.getProperty("file.separator")+ fileName)));// 开始把文件写到指定的上传文件夹Streams.copy(in, out, true);response.getWriter().println("File upload successfully!!!");// 成功,到上传文件夹中看看,上传的东西齐了吗} else {System.out.println("Form field " + name + " with value "            + Streams.asString(stream) + " detected.");}}}} catch (Exception e) {e.printStackTrace();}}public void init() throws ServletException {/* * 对上传文件夹和临时文件夹进行初始化 */super.init();String tmpPath = "d:" + System.getProperty("file.separator") + "tmpdir";String savePath = "d:" + System.getProperty("file.separator") + "updir";tmpDir = new File(tmpPath);saveDir = new File(savePath);if (!tmpDir.isDirectory())tmpDir.mkdir();if (!saveDir.isDirectory())saveDir.mkdir();}}

?

?附:还有另外一种不是直接得到数据流的处理方法

List /* FileItem */ items = upload.parseRequest(request);Iterator iter = items.iterator();while (iter.hasNext()) {    FileItem item = (FileItem) iter.next();if (!item.isFormField()) {String fieldName = item.getFieldName();    String fileName = item.getName();    String contentType = item.getContentType();    boolean isInMemory = item.isInMemory();    long sizeInBytes = item.getSize();System.out.println("upload field : fieldName=" + fieldName + " ! fileName=" + fileName+" ! contentType=" + contentType + " ! isInMemory=" + isInMemory+ " ! sizeInBytes=" + sizeInBytes);// 获得文件输入流BufferedInputStream in = new BufferedInputStream(item.getInputStream());// 获得文件输出流BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+ System.getProperty("file.separator")+ fileName)));// 开始把文件写到指定的上传文件夹Streams.copy(in, out, true);response.getWriter().println("File upload successfully!!!");// 成功,到上传文件夹中看看,上传的东西齐了吗} else {String name = item.getFieldName();String value = item.getString();System.out.println("form field : name=" + name + " ! value=" + value);}}
?

?

5、最后配置web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><servlet><servlet-name>UploadServlet</servlet-name><servlet-class>demo.servlet.UploadServlet</servlet-class></servlet><servlet-mapping><servlet-name>UploadServlet</servlet-name><url-pattern>/UploadServlet</url-pattern></servlet-mapping></web-app>

?

到次久算写完了,部署启动tomcat,访问http://localhost:8080/upload/

?

附上工程

?

参考:

http://commons.apache.org/fileupload/using.html

http://commons.apache.org/fileupload/streaming.html

热点排行