JavaWeb----文件的上传

首先导入所需要的包:

编写jsp前段页面:

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <!DOCTYPE html>
 4 <html>
 5 <head>
 6 <meta charset="utf-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 <form action="UploadServlet" enctype="multipart/form-data" method="post">
11     description:<textarea rows="20" cols="10" name="description"></textarea><br/>
12     file:<input type="file" name="myfile" />
13      <input type="submit" value="提交">
14 </form>
15 </body>
16 </html>

上传成功页面:

 1 <%@ page language="java" contentType="text/html; charset=utf-8"
 2     pageEncoding="utf-8"%>
 3 <!DOCTYPE html>
 4 <html>
 5 <head>
 6 <meta charset="utf-8">
 7 <title>消息提示</title>
 8 </head>
 9 <body>
10     ${info}
11 </body>
12 </html>

最后是关键的核心代码:

  1 package com.servlet.yn;
  2 
  3 import java.io.File;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.util.Iterator;
  8 import java.util.List;
  9 import java.util.UUID;
 10 
 11 import javax.servlet.ServletException;
 12 import javax.servlet.annotation.WebServlet;
 13 import javax.servlet.http.HttpServlet;
 14 import javax.servlet.http.HttpServletRequest;
 15 import javax.servlet.http.HttpServletResponse;
 16 
 17 import org.apache.commons.fileupload.FileItem;
 18 import org.apache.commons.fileupload.FileUploadException;
 19 import org.apache.commons.fileupload.ProgressListener;
 20 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
 21 import org.apache.commons.fileupload.servlet.ServletFileUpload;
 22 
 23 
 24 @WebServlet("/UploadServlet")
 25 public class UploadServlet extends HttpServlet {
 26     private static final long serialVersionUID = 1L;
 27 
 28     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 29         String savePath = this.getServletContext().getRealPath("/fileSaves");
 30         File saveFile = new File(savePath);
 31         if(!saveFile.exists()) {
 32             saveFile.mkdirs();
 33         }
 34         String tempPath = this.getServletContext().getRealPath("/temp");
 35         File tempFile = new File(tempPath);
 36         if(!tempFile.exists()) {
 37             tempFile.mkdirs();
 38         }
 39         
 40         DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
 41         diskFileItemFactory.setSizeThreshold(10240);
 42         //临时文件存储位置
 43         diskFileItemFactory.setRepository(tempFile);
 44         //构建文件上传核心对象
 45         ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
 46         //监听上传进度
 47         servletFileUpload.setProgressListener(new ProgressListener() {
 48             @Override
 49             public void update(long arg0, long arg1, int arg2) {
 50                 System.out.println(arg0 + "    " + arg1);
 51             }
 52         });
 53         servletFileUpload.setHeaderEncoding("utf-8");
 54         //判断请求类型
 55         if(servletFileUpload.isMultipartContent(request)) {
 56             servletFileUpload.setFileSizeMax(1024 * 1024 * 1024);
 57             servletFileUpload.setSizeMax(1024 * 1024 * 1024 * 10);
 58             try {
 59                 List<FileItem> fileItmes = servletFileUpload.parseRequest(request);
 60                 Iterator<FileItem> iterator = fileItmes.iterator();
 61                 while(iterator.hasNext()) {
 62                     FileItem fileItem = iterator.next();
 63                     //判断是不是表单字段和上传组件
 64                     if(fileItem.isFormField()) {
 65                         //获取字段名称和字段值
 66                         String fieldName = fileItem.getFieldName();
 67                         String fileValue = fileItem.getString("utf-8");
 68                         System.out.println(fieldName + "------ " + fileValue);
 69                     }else {
 70                         //获取文件名
 71                         String name = fileItem.getName();
 72                         String fileName = name.substring(name.lastIndexOf("\") + 1, name.lastIndexOf("."));
 73                         //获取拓展名
 74                         String extName = name.substring(name.lastIndexOf("."));
 75                         //判断文件大小和磁盘大小
 76                         if(fileItem.getSize() < servletFileUpload.getFileSizeMax()) {
 77                             //获取输入流
 78                             InputStream inputStream = fileItem.getInputStream();
 79                             //获得随机UUID
 80                             String uuid = UUID.randomUUID().toString().replaceAll("-", "");
 81                             //拼装最后的文件路径
 82                             String finalPath = savePath + "\" + fileName + uuid + "." + extName;
 83                             //文件上传
 84                             FileOutputStream fileOutputStream = new FileOutputStream(finalPath);
 85                             int len = 0;
 86                             byte[] bytes = new byte[1024];
 87                             while((len = inputStream.read(bytes)) > 0) {
 88                                 fileOutputStream.write(bytes, 0, len);
 89                             }
 90                             fileOutputStream.flush();
 91                             fileOutputStream.close();
 92                             inputStream.close(); 
 93                             request.setAttribute("info", "文件上传成功!存储路径是" + finalPath);
 94                             request.getRequestDispatcher("/message.jsp").forward(request, response);
 95                         }
 96                         
 97                     }
 98                 }
 99             } catch (FileUploadException e) {
100                 e.printStackTrace();
101             }
102         }
103         
104         
105         
106         
107         
108         
109         
110     }
111 
112 }

结果截图:

编辑于2018-11-20

原文地址:https://www.cnblogs.com/nick9527/p/9991607.html