apache commons fileupload 处理文件上传的两种方式(流式和非流式)
来源:互联网 发布:淘宝免费货源怎么找 编辑:程序博客网 时间:2024/06/06 20:10
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><listener><listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class></listener><servlet><servlet-name>FileServlet</servlet-name><servlet-class>com.wxl.app.FileServlet</servlet-class></servlet><servlet-mapping><servlet-name>FileServlet</servlet-name><url-pattern>/upload</url-pattern></servlet-mapping><servlet><servlet-name>StreamFileServlet</servlet-name><servlet-class>com.wxl.app.StreamFileServlet</servlet-class></servlet><servlet-mapping><servlet-name>StreamFileServlet</servlet-name><url-pattern>/stream/upload</url-pattern></servlet-mapping></web-app>
package com.wxl.app;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;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.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.FileCleanerCleanup;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.io.FileCleaningTracker;import org.apache.commons.io.IOUtils;public class FileServlet extends HttpServlet {@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overridepublic void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("UTF-8");if (ServletFileUpload.isMultipartContent(req)) {// 文件上传请求// 创建文件项工厂FileCleaningTracker fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(this.getServletContext());DiskFileItemFactory factory = new DiskFileItemFactory();factory.setFileCleaningTracker(fileCleaningTracker);// 由内存存储到磁盘存储的临界值,默认为10KB// factory.setSizeThreshold(yourMaxMemorySize);// 文件上传的临时目录,默认为System.getProperty("java.io.tmpdir")// factory.setRepository(yourTempDirectory);// 创建文件上传处理器ServletFileUpload upload = new ServletFileUpload(factory);// 设置编码方式// upload.setHeaderEncoding("UTF-8");// 设置单个请求的大小,默认为不限制// upload.setSizeMax(yourMaxRequestSize);// 设置单个文件的大小,默认为不限制// upload.setFileSizeMax(yourFileSizeMax);try {// 解析请求List<FileItem> items = upload.parseRequest(req);// 处理上传项Iterator<FileItem> iter = items.iterator();while (iter.hasNext()) {FileItem item = (FileItem) iter.next();if (item.isFormField()) {System.out.println("---------------普通表单项");String name = item.getFieldName();System.out.println("FieldName: " + name);String value = item.getString("UTF-8");System.out.println("FieldValue: " + value);} else {System.out.println("---------------文件表单项");String fieldName = item.getFieldName();System.out.println("FieldName: " + fieldName);String fileName = item.getName();System.out.println("FileName: " + fileName);String contentType = item.getContentType();System.out.println("ContentType: " + contentType);InputStream is = item.getInputStream();OutputStream os = new FileOutputStream(new File("c:/"+ fileName));IOUtils.copy(is, os);IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);}}} catch (FileUploadException e) {e.printStackTrace();}} else {// 非文件上传请求throw new RuntimeException("非文件上传请求");}}}
package com.wxl.app;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItemIterator;import org.apache.commons.fileupload.FileItemStream;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.util.Streams;import org.apache.commons.io.IOUtils;public class StreamFileServlet extends HttpServlet {@Overridepublic void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doPost(req, resp);}@Overridepublic void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("UTF-8");if (ServletFileUpload.isMultipartContent(req)) {// 创建一个文件上传处理器ServletFileUpload upload = new ServletFileUpload();// 解析请求FileItemIterator iter;try {iter = upload.getItemIterator(req);while (iter.hasNext()) {FileItemStream item = iter.next();InputStream stream = item.openStream();if (item.isFormField()) {System.out.println("---------------普通表单项");String name = item.getFieldName();System.out.println("FieldName: " + name);String value = Streams.asString(stream, "UTF-8");System.out.println("FieldValue: " + value);} else {System.out.println("---------------文件表单项");String fieldName = item.getFieldName();System.out.println("FieldName: " + fieldName);String fileName = item.getName();System.out.println("FileName: " + fileName);OutputStream os = new FileOutputStream(new File("c:/"+ fileName));IOUtils.copy(stream, os);IOUtils.closeQuietly(stream);IOUtils.closeQuietly(os);}}} catch (FileUploadException e) {e.printStackTrace();}}}}
<%@ 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 'upload.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><form action="upload" method="post" enctype="multipart/form-data"><input type="text" name="name"/><br/><input type="file" name="file"/><br/><input type="submit" value="提交"/></form></body></html>
<%@ 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 'upload.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><form action="stream/upload" method="post" enctype="multipart/form-data"><input type="text" name="name"/><br/><input type="file" name="file"/><br/><input type="submit" value="提交"/></form></body></html>
使用非流式处理上传时,临时文件存放在System.getProperty("java.io.tmpdir")目录下,如果用的是tomcat容器,那么临时文件是存放在CATALINA_HOME/temp目录下的。
FileCleanerCleanup貌似没起作用,下次改进。
参考apache commons fileupload 用户指导
0 1
- apache commons fileupload 处理文件上传的两种方式(流式和非流式)
- apache commons-fileupload 文件上传
- Apache Commons fileUpload文件上传
- Apache FileUpload的两种上传方式介绍
- Apache FileUpload的两种上传方式介绍及应用
- commons-fileupload(apache开源文件上传组件)使用方式
- 基于apache commons-fileupload-1.2组件的文件上传
- 使用apache的commons-fileupload实现多文件上传
- 基于apache commons-fileupload-1.2组件的文件上传
- apache的commons-fileupload实现文件上传,下载
- Commons-fileupload 文件的上传
- servlet文件上传(工具类apache.commons.fileupload)
- Apache Commons fileUpload实现文件上传
- 使用apache.commons.fileupload 进行文件上传
- Apache Commons fileUpload实现文件上传
- Apache Commons fileUpload实现文件上传
- OpenCMS 文件上传 Apache Jakarta Commons-FileUpload
- Apache Commons fileUpload实现文件上传
- 报错:java.lang.OutOfMemoryError: Java heap space
- ubuntu中安装和配置apache2
- Binary Tree Preorder Traversal (Java)
- mfc SetWindowText不起作用
- Andoird 4.2.2的Account Manager原理
- apache commons fileupload 处理文件上传的两种方式(流式和非流式)
- iOS中如何修改系统自带的导航栏的颜色
- VS2013编译jthread-1.3.1和jrtplib-3.9.1
- 必须记住的Myeclipse快捷键
- 36会话界面的完成
- 如何在Ubuntu中使用root账号登录(新增Ubuntu12.04/14.04)?
- 简易的$_GET获取改写过滤函数
- 百度地图3.0
- 谷歌浏览器下在文本框中敲回车会下载。。。Resource interpreted as Document but transferred with MIME type application/json