zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    2020916 spring总结
    20200915--事务
    20200915-mybatis基础
    20200911--使用注解开发
    20200910--Spring配置
    20200909--spring基础-IOC
    20200909-待补充
    20200909记我所看到的问题
    20200909-spring基础一
    面向对象
  • 原文地址:https://www.cnblogs.com/nick9527/p/9991607.html
Copyright © 2011-2022 走看看