Apache FileUpload实现文件上传
今天,我来介绍一个Apache FileUpload这个插件的使用。
首先,到官网下载相关jar包点击这里下载,这里提供是v1.2.
1.在项目中导入相关jar包commons-fileupload-1.2.2.jar 、commons-io-2.0.1.jar这两个包;
2.建立如下a.jsp(这里只提供核心代码)
<form name="form1" action="${ctx}/ware/WaretServlet?action=modify_ware" method="post" class="niceform" enctype="multipart/form-data"> <input type="hidden" name="WareID" value="${ware.wareID}"/> <fieldset> <dl> <dt><label for="email">商品名称:</label></dt> <dd><input type="text" name="WareName" value="${ware.wareName}" id="" size="54" /></dd> </dl> <dl> <dt><label for="upload">上传图片:</label></dt> <dd><input type="file" name="PicUrl" id="upload" value="${ware.picUrl}"/></dd> </dl> <dl class="submit"> <input type="submit" name="submit" id="submit" value="修改" /> <input type="reset" name="submit" id="submit" value="重填" /> </dl> </fieldset> </form>
3.建立如下servlet WareServlet
1 private void modify_ware(HttpServletRequest request, 2 HttpServletResponse response) throws ServletException, IOException { 3 DiskFileItemFactory f = new DiskFileItemFactory();//磁盘对象 4 f.setRepository(new File("d:/a"));//设置临时目录 5 f.setSizeThreshold(1024*8);//8k的缓冲区,文件大于8K则保存到临时目录 6 ServletFileUpload upload = new ServletFileUpload(f);//声明解析request的对象 7 upload.setHeaderEncoding("utf-8");//处理中文 8 upload.setSizeMax(1024*1024*10);//设置单个文件最大为10M 9 upload.setSizeMax(1024*1024*20);//最多能上传20M 10 String path = getServletContext().getRealPath("/imgs");//获取文件要保存的目录 11 try 12 { 13 List<String> paramli = new ArrayList<String>(); 14 @SuppressWarnings("unchecked") 15 List<FileItem> list = upload.parseRequest(request);// 解析 16 for (FileItem ff : list) 17 { 18 if (ff.isFormField()) 19 { 20 String ds = ff.getString("UTF-8");//处理中文 21 //System.err.println("说明是:" + ds); 22 paramli.add(ds); 23 } 24 else 25 { 26 String ss = ff.getName(); 27 System.out.println(ss); 28 paramli.add(ss); 29 //request.setAttribute("filename",ss); 30 ss = ss.substring(ss.lastIndexOf("\\") + 1);//解析文件名 31 ////直接使用commons.io.FileUtils 32 FileUtils.copyInputStreamToFile(ff.getInputStream(),new File(path + "/" + ss)); 33 } 34 } 35 for(String s:paramli) 36 { 37 System.out.print(s+" "); 38 } 39 } 40 catch (Exception e) 41 { 42 e.printStackTrace(); 43 } 44 }
到这里就ok了。这里的代码由于删减可能有小问题,稍微调试一下就可以了