浏览 12206 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-23
利用apache的fileupload组件实现文件的上传 package org.xxm; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dareway.org.apache.commons.fileupload.FileItem; import dareway.org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; import dareway.org.apache.commons.fileupload.disk.DiskFileItemFactory; import dareway.org.apache.commons.fileupload.servlet.ServletFileUpload; import dareway.org.apache.commons.fileupload.util.Streams; /** * @author xuxiaoming * 2009-03-19 * 以tomcat6.0为服务器 */ public class UploadFileServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) { return; } public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException { /** * form中的enctype必须是multipart/... * 组件提供方法检测form表单的enctype属性 * 在isMultipartContent方法中同时检测了是否是post提交 * 如果不是post提交则返回false */ if(ServletFileUpload.isMultipartContent(req)) { req.setCharacterEncoding("utf-8"); DiskFileItemFactory factory = new DiskFileItemFactory(); /** * 临时文件存储路径要真实存在 */ factory.setRepository(new File("../webapps/fileupload/tmp")); //内存最大占用 factory.setSizeThreshold(1024000); ServletFileUpload sfu = new ServletFileUpload(factory); //单个文件最大值byte sfu.setFileSizeMax(102400000); //所有上传文件的总和最大值byte sfu.setSizeMax(204800000); List items = null; try { items = sfu.parseRequest(req); } catch (SizeLimitExceededException e) { System.out.println("size limit exception!"); } catch(Exception e) { e.printStackTrace(); } Iterator iter = items==null?null:items.iterator(); while(iter != null && iter.hasNext()) { FileItem item = (FileItem)iter.next(); //简单的表单域 if(item.isFormField()) { System.out.print("form field:"); System.out.print(item.getFieldName() + " "); System.out.print(item.getString()); } //文件域 else if(!item.isFormField()) { System.out.println("client name:" + item.getName()); String fileName = item.getName().substring(item.getName().lastIndexOf("\\")); BufferedInputStream in = new BufferedInputStream(item.getInputStream()); //文件存储在工程的upload目录下,这个目录也得存在 BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File("../webapps/fileupload/upload/" + fileName))); Streams.copy(in, out, true); } } } else { System.out.println("enctype error!"); } } }
因为使用tomcat做得服务器,所以里面的路径都是以tomcat为基础来写得,具体情况需要修改。
附件是一个做好的例子,可以直接部署。
下次会以这个为基础搞一个ajax式的文件上传。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-23
apache的fileupload组件用了MINA框架没?
|
|
返回顶楼 | |
发表时间:2009-03-24
以前用过这种方法,现在记不太清楚了,看楼主写的思路很清晰。还学了个Streams.copy(in, out, true);
|
|
返回顶楼 | |
发表时间:2009-03-24
说实话.这种代码写出来有什么意义呢?
无非就是调用人家已经封装好了的API。这种谁都会的。 建议楼主看看 源码 |
|
返回顶楼 | |
发表时间:2009-03-25
aspserver 写道 说实话.这种代码写出来有什么意义呢? 无非就是调用人家已经封装好了的API。这种谁都会的。 建议楼主看看 源码 没有意义,就是介绍一下而已。 |
|
返回顶楼 | |
发表时间:2009-03-25
sxjkk 写道 apache的fileupload组件用了MINA框架没? 不知道MINA框架,大体看了看好像没有 |
|
返回顶楼 | |
发表时间:2009-07-22
还是很不错的贴,对于第一次使用fileUpload的人会有很大帮助,至少给与一定了解
|
|
返回顶楼 | |