执行类:
/** * @author LXY * @date 2008=11-11 */public class UploadAction extends HttpServlet { private static final long serialVersionUID = 1L; String uploadPath = ""; // 用于存放上传文件的目录 String tempPath = ""; // 用于存放临时文件的目录
@Override public void init() throws ServletException { super.init(); //从配置文件中读取文件路径 uploadPath = this.getInitParameter("uploadPath"); tempPath = this.getInitParameter("tempPath"); }
@SuppressWarnings("unchecked") public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//用于存放上传文件的原路径 List<String> fileList = new ArrayList<String>(); //创建存放上传文件的文件夹 File fileDir = new File(uploadPath); if (!fileDir.exists()) { fileDir.mkdir(); } //创建临时文件夹 File tempDir = new File(tempPath); if (!tempDir.exists()) { tempDir.mkdir(); } DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setRepository(new File(tempPath)); // 设置临时目录 factory.setSizeThreshold(1024 * 1024); // 设置缓冲区大小
ServletFileUpload upload = new ServletFileUpload(factory); //设置字符集 upload.setHeaderEncoding("UTF-8"); try { List<FileItem> list = upload.parseRequest(request); // 得到所有的文件
for (FileItem fileItem : list) { // 如果是表单信息 if (fileItem.isFormField()) { String name = fileItem.getFieldName(); // 获得表单中按钮的类型 String value = fileItem.getString("UTF-8"); // 获得表单中按钮的值 request.setAttribute(name, value); } else { String name = fileItem.getFieldName(); //获得表单中域的名字 String value = fileItem.getName(); // 获得从浏览器中取得的文件全路径 //将上传文件的路径放到列表里 fileList.add(value); int start = value.lastIndexOf("\\"); String fileName = value.substring(start + 1); // 由于不同的浏览器可能取得的文件的名字不同,有的浏览器将整个路径取道,有的浏览器只取到文件名 request.setAttribute(name, fileName); // IE里取的是文件明,如XXX.doc等
// 使用fileupload提供的上传 try { // 写入文件,也可以从fileName中提取文件名: fileItem.write(new File(uploadPath, fileName)); } catch (Exception e) { e.printStackTrace(); } } } } catch (FileUploadException e) { e.printStackTrace(); } //将获得的文件路径放回请求 request.setAttribute("fileList", fileList); //页面跳转 request.getRequestDispatcher("success.jsp").forward(request, response); }
}