怎么利用apache的FileUpload组件实现文件上传?
怎么利用apache的FileUpload组件实现文件上传?
1、可以实现一个或多个文件的上传,也可以接收普通的form表单数据。 2、简单测试了一下,对内存的占用还是可以忍受的,而且速度也可以。偶尔会导致内存使用的上升而且不会下降,长时间后是否会降下来还没有测试。 关键点: 1、提交文件上传的form的method属性为post,enctype属性为multipart/form-data。
2、input标签需要有name属性,否则取不到内容。 看看servlet的实现,注释已经很详细了: Java代码 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; /** 以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为基础来写得,具体情况需要修改。
答:打开“我的电脑”--点击“工具”菜单--文件夹选项--“常规”标签,点选“在不同窗口中打开不同的文件夹”--应用--确定。ok详情>>