1 package pageckage; 2 3 4 5 import java.io.File; 6 import java.io.*; 7 import java.io.IOException; 8 import java.io.PrintWriter; 9 import java.util.List; 10 11 import javax.servlet.ServletException; 12 import javax.servlet.http.HttpServlet; 13 import javax.servlet.http.HttpServletRequest; 14 import javax.servlet.http.HttpServletResponse; 15 16 import org.apache.commons.fileupload.FileItem; 17 import org.apache.commons.fileupload.FileUploadException; 18 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 19 import org.apache.commons.fileupload.servlet.ServletFileUpload; 20 21 /** 22 * 23 * @author Administrator 24 * 文件上传 25 * 具体步骤: 26 * 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包 27 * 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同 28 * 3)对 DiskFileItemFactory 对象设置一些 属性 29 * 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory); 30 * 目的是调用 parseRequest(request)方法 获得 FileItem 集合list , 31 * 32 * 5)在 FileItem 对象中 获取信息, 遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理 33 * 6) 34 * 第一种. 用第三方 提供的 item.write( new File(path,filename) ); 直接写到磁盘上 35 * 第二种. 手动处理 36 * 37 */ 38 39 40 /** 41 * jsp 页面代码 42 4351 52 */ 53 54 55 56 public class UploadServlet extends HttpServlet { 57 58 public void doPost(HttpServletRequest request, HttpServletResponse response) 59 throws ServletException, IOException { 60 61 request.setCharacterEncoding("utf-8"); //设置编码 62 63 //获得磁盘文件条目工厂 64 DiskFileItemFactory factory = new DiskFileItemFactory(); 65 //获取文件需要上传到的路径 66 String path = request.getRealPath("/upload"); 67 68 //如果没以下两行设置的话,上传大的 文件 会占用 很多内存, 69 //设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同 70 /** 71 * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 72 * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的 73 * 然后再将其真正写到 对应目录的硬盘上 74 */ 75 factory.setRepository(new File(path)); 76 //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室 77 factory.setSizeThreshold(1024*1024) ; 78 79 //高水平的API文件上传处理 80 ServletFileUpload upload = new ServletFileUpload(factory); 81 82 83 try { 84 //可以上传多个文件 85 List