支持多文件上传?
所需jar包?
1. commons-FileUpload 1.2 包?
2. commons-IO 1.3.1 包?
3. Commons-BeanUtils 1.8 包?
-----------------------------------upload.jsp-----------------------------------?
- <html>????
- <head>????
- <title>Jsp+Servlet?upload?file</title>????
- </head>????
- <body>????
- ??<form?action="uploadServlet"?method="POST"?enctype="multipart/form-data">????
- ????<input?type?="file"?name="file1"/><br/>????
- ????<input?type?="file"?name="file2"/><br/>????
- ????<input?type="submit"?value="Submit"?/><br/>????
- ????<input?type="reset"?/>????
- ??</form>????
- </body>????
- </html>??
??
--------------------------------------uploadServlet.java--------------------------------
- package?lee.util;???
- ??
- 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.disk.DiskFileItemFactory;???
- import?org.apache.commons.fileupload.servlet.ServletFileUpload;???
- import?org.apache.commons.logging.Log;???
- import?org.apache.commons.logging.LogFactory;???
- ??
- /**??
- *?<p>Title:文件上传(支持多文件上传)</p>??
- *?<p>Description>:FileUpLoad.java</p>??
- *?<p>Create?Time:Nov?3,?2010?3:22:21?PM</p>??
- *?<p>@version:?5.0</p>??
- *?<p>@author:?LiWeichao</p>??
- */???
- public?class?UploadServlet?extends?HttpServlet?{???
- ??
- private?static?final?Log?log?=?LogFactory.getLog(UploadServlet.class);???
- ??
- @Override???
- protected?void?doGet(HttpServletRequest?req,?HttpServletResponse?resp)???
- throws?ServletException,?IOException?{???
- this.doPost(req,?resp);???
- }???
- ??
- @Override???
- protected?void?doPost(HttpServletRequest?request,???
- HttpServletResponse?response)?throws?ServletException,?IOException?{???
- try?{???
- String?fileName="";//上传到服务器的文件名???
- ????String?savePath?=?this.getServletContext().getRealPath("/")+"UploadFiles\\";???
- ????File?saveDir?=?new?File(savePath);?????
- ????if(!saveDir.isDirectory())//目录不存在则创建相应目录???
- ????????saveDir.mkdir();?????
- if?(ServletFileUpload.isMultipartContent(request))?{???
- DiskFileItemFactory?dff?=?new?DiskFileItemFactory();//?创建该对象???
- dff.setSizeThreshold(1024000);//?指定在内存中缓存数据大小,单位为byte???
- ServletFileUpload?sfu?=?new?ServletFileUpload(dff);//?创建该对象???
- sfu.setFileSizeMax(5000000);//?指定单个上传文件的最大尺寸(单个文件大小不超过5M)???
- sfu.setSizeMax(20000000);//?指定一次上传多个文件的总尺寸(总文件大小不超过20M)???
- FileItemIterator?fii?=?sfu.getItemIterator(request);//?解析request???
- //?请求,并返回FileItemIterator集合???
- while?(fii.hasNext())?{???
- FileItemStream?fis?=?fii.next();//?从集合中获得一个文件流???
- if?(!fis.isFormField()?&&?fis.getName().length()?>?0)?{//?过滤掉表单中非文件域???
- //?根据系统时间生成上传文件的文件名?避免重复和中文乱码???
- fileName?=?fis.getName().trim();???
- fileName=System.currentTimeMillis()+fileName.substring(fileName.lastIndexOf("."));???
- //获取文件写入流???
- InputStream?stream=fis.openStream();???
- //创建输出流???
- OutputStream?bos=new?FileOutputStream(savePath+fileName);???
- int?bytesRead?=?0;???
- byte[]?buffer?=?new?byte[8192];???
- while?((bytesRead?=?stream.read(buffer,?0,?8192))?!=?-1){???
- bos.write(buffer,?0,?bytesRead);//将文件写入服务器???
- }???
- bos.close();???
- stream.close();???
- }???
- }???
- response.getWriter().println("File?upload?successfully!!!");//?终于成功了,还不到你的上传文件中看看,你要的东西都到齐了吗???
- }???
- }?catch?(Exception?e)?{???
- log.error("#ERROR#:上传附件发生错误,请检查!",e);???
- e.printStackTrace();???
- }???
- ??
- }???
- }???
?
-----------------------------------web.xml-----------------------------------
- <servlet>???
- <servlet-name>uploadServlet</servlet-name>???
- <servlet-class>lee.util.UploadServlet</servlet-class>???
- </servlet>???
- <servlet-mapping>???
- <servlet-name>uploadServlet</servlet-name>???
- <url-pattern>/uploadServlet</url-pattern>???
- </servlet-mapping>