六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 79|回复: 0

servlet fileupload上传文件

[复制链接]

升级  8%

14

主题

14

主题

14

主题

秀才

Rank: 2

积分
62
 楼主| 发表于 2013-2-7 18:31:50 | 显示全部楼层 |阅读模式
 
版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明. 

原文出处:
http://tbwuming.iteye.com/admin/blogs/1520140
 
1. maven依赖
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency> 2. fileload处理类
import java.io.File;import java.io.PrintWriter;import java.util.List;import javax.servlet.http.HttpServletRequest;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.ServletFileUpload;import org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class FileUpload {private static final Logger logger = LoggerFactory.getLogger(FileUpload.class);private static final int DEFAULT_SIZE_THRESHOLD = 1 * 1024 * 1024;private static final long DEFAULT_MAX_FILE_SIZE = 8 * 1024 * 1024;private String uploadPath;private String tempPath;private Integer thresholdSize;private Long maxFileSize;private ServletFileUpload upload;// 初始化fileloadpublic void init() {DiskFileItemFactory diskFactory = new DiskFileItemFactory();// 设置文件大小超过缓存时所存放的目录diskFactory.setRepository(new File(tempPath));// 设置缓存大小if (thresholdSize == null)diskFactory.setSizeThreshold(DEFAULT_SIZE_THRESHOLD);elsediskFactory.setSizeThreshold(thresholdSize);upload = new ServletFileUpload(diskFactory);// 设置最大可上传的文件大小if (maxFileSize == null)upload.setSizeMax(DEFAULT_MAX_FILE_SIZE);elseupload.setSizeMax(maxFileSize);}// 获取文件列表@SuppressWarnings("unchecked")public List<FileItem> getFileItems(HttpServletRequest request) {List<FileItem> fileItems = null;try {fileItems = (List<FileItem>) upload.parseRequest(request);} catch (FileUploadException e) {logger.error("process upload request error", e);}return fileItems;}public File process(PrintWriter out, FileItem item, Throwable throwable) {String filename = item.getName();logger.info("full filename:" + filename);if (StringUtils.isBlank(filename)) {logger.warn("filename {} is null", filename);return null;}// linux和windows路径分隔符不一样,因此处理int index = filename.lastIndexOf("/");if (index == -1)index = filename.lastIndexOf("\\");// 获取文件名filename = filename.substring(index + 1, filename.length());long fileSize = item.getSize();if (StringUtils.isBlank(filename) || fileSize == 0) {logger.warn("filename {} is empty", filename);return null;}// 写文件String pathname = uploadPath + "/" + filename;File uploadFile = new File(pathname);try {item.write(uploadFile);} catch (Exception e) {throwable = e;logger.error("write file error, file={}", pathname, e);}out.println(filename + " file upload complete ...");out.println("file size:" + fileSize + "\r\n");return uploadFile;}public void setUploadPath(String uploadPath) {this.uploadPath = uploadPath;}public void setTempPath(String tempPath) {this.tempPath = tempPath;}public void setThresholdSize(Integer thresholdSize) {this.thresholdSize = thresholdSize;}public void setMaxFileSize(Long maxFileSize) {this.maxFileSize = maxFileSize;}} 
3. servlet
import java.io.IOException;import java.io.PrintWriter;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.slf4j.Logger;import org.slf4j.LoggerFactory;public class UploadServlet extends HttpServlet {private static final long serialVersionUID = -5562457977157562484L;private static final Logger logger = LoggerFactory.getLogger(UploadServlet.class);private FileUpload fileUpload;@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/plain;charset=utf-8");PrintWriter out = response.getWriter();List<FileItem> fileItems = (List<FileItem>) fileUpload.getFileItems(request);for (FileItem item : fileItems) {if (!item.isFormField()) {Throwable throwable = null;fileUpload.process(out, item, throwable);}}logger.info("upload file success");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {doGet(request, response);}public void setFileUpload(FileUpload fileUpload) {this.fileUpload = fileUpload;}} 4. html 内容
<html>     <head>      <title>上传文件</title>    </head>         <body> <center><form name="uploadForm" method="post" enctype="multipart/form-data" action="/upload"><table><tr><th colspan="2">上传文件</th></tr><tr><td>Upload File:</td><td><input type="file" name="uploadFilename" size="30"/> </td></tr><tr><td align="center" colspan="2"><input type="submit" name="submit" value="上传">     <input type="reset" name="reset" value="重置"> </td></tr></form> </center>    </body> </html> 
 说明:
1). form提交模式需要是post模式,当页面传输内容比较大的时候一般时候post方式
2). 指明enctype为multipart/form-data类型
3). action中指定servlet访问相对路径
 
 
5. spring配置
<bean class="com.taobao.crawler.web.UploadServlet"><property name="fileUpload" ref="fileUpload" /></bean><bean id="fileUpload" class="com.taobao.crawler.web.FileUpload" init-method="init">        <property name="uploadPath" value="./config" /><property name="tempPath" value="./temp" /></bean>
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表