今天web学习中遇到文件的上传问题,只是想保存一下学习代码。
- 需求说明:
网页中提供一个文件上传按钮实现文件上传到web项目下的目的
- 所需jar包:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
- 实现效果:
- HTML代码

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="UploadServlet" method="post" enctype="multipart/form-data"> 11 用户名<input type="text" /> 12 <input type="file" name="上传文件" /> 13 <input type="submit" name="submit" value="提交"/> 14 </form> 15 </body> 16 </html>
- Servlet代码
1 package com.zz.servlet; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 import java.util.List; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 14 import org.apache.commons.fileupload.FileItem; 15 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 16 import org.apache.commons.fileupload.servlet.ServletFileUpload; 17 18 19 /** 20 * Servlet implementation class UplodServlet 21 */ 22 public class UplodServlet extends HttpServlet { 23 private static final long serialVersionUID = 1L; 24 /** 25 * @see HttpServlet#HttpServlet() 26 */ 27 public UplodServlet() { 28 super(); 29 // TODO Auto-generated constructor stub 30 } 31 /** 32 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 33 */ 34 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 35 // TODO Auto-generated method stub 36 //处理中文乱码,可以用下方的处理乱码替换 37 //request.setCharacterEncoding("utf-8"); 38 39 //创建上传文件操作的工厂类对象 40 DiskFileItemFactory factory = new DiskFileItemFactory(); 41 42 //文件上传的核心类 43 ServletFileUpload upload = new ServletFileUpload(); 44 45 //处理中文乱码 46 upload.setHeaderEncoding("utf-8"); 47 //设置上传文件的最大大小,单位字节 48 upload.setFileSizeMax(1024*1024); 49 50 //判断表单的enctype是否是multipart/form-data 51 if (ServletFileUpload.isMultipartContent(request)) { 52 try { 53 //将请求转换为FileItem对象的集合 54 List<FileItem> itemlist = upload.parseRequest(request); 55 for (FileItem item : itemlist) { 56 //如果是普通控件的请求数据 57 if (item.isFormField()) { 58 //得到控件name的属性的值 59 System.out.println(item.getFieldName()); 60 //得到控件的提交的参数值 61 System.out.println(item.getString()); 62 //请求数据的中文乱码 63 System.out.println(item.getString("utf-8")); 64 }else {//file 65 //得到文件名 66 System.out.println(item.getName()); 67 // 68 String path="D:/upload"; 69 File file = new File(path); 70 if (!file.exists()) { 71 file.mkdirs(); 72 } 73 //String filePath = path + "/" +item.getName(); 74 //保存文件 75 //item.write(new File(filePath)); 76 77 //item.write(new File(path,item.getName())); 78 79 //给文件名加上时间,来减小文件名的重复率 80 Date date = new Date(); 81 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); 82 String format = sdf.format(date); 83 String newName = format + item.getName(); 84 item.write(new File(path, newName)); 85 86 //删除缓存中的数据 87 item.delete(); 88 } 89 } 90 } catch (Exception e) { 91 // TODO Auto-generated catch block 92 e.printStackTrace(); 93 } 94 } 95 } 96 97 /** 98 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 99 */ 100 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 101 // TODO Auto-generated method stub 102 doGet(request, response); 103 } 104 105 }