JavaWeb学习-简单文件上传

今天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>
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 }
原文地址:https://www.cnblogs.com/himonkey/p/7297967.html