zoukankan      html  css  js  c++  java
  • SpringMVC 系列教程2-文件上传-MultipartFile

    MultipartFileUploadController

    package com.jege.spring.mvc;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.apache.commons.io.FilenameUtils;
    import org.apache.commons.io.IOUtils;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.multipart.MultipartFile;
    
    @Controller
    public class MultipartFileUploadController{
      // http://localhost:8080/upload
    
      @RequestMapping(value = "/upload", method = RequestMethod.GET)
      public String uploadGet() {
        System.out.println("先以get的请求方式显示上传页面");
        return "upload";
      }
    
      int i = 0;// 简单改变上传文件的名字
    
      @RequestMapping(value = "/upload", method = RequestMethod.POST)
      public String uploadPost(MultipartFile upload, HttpServletRequest request) throws Exception {
        System.out.println("在以post请求方式处理上传的请求");
    
        if (upload != null) {
          // 记录开始上传文件的时间
          long startTime = System.currentTimeMillis();
    
          System.out.println("上传文件的名称:" + upload.getOriginalFilename());
          System.out.println("上传文件的类型:" + upload.getContentType());
          System.out.println("上传文件的大小:" + upload.getSize());
          System.out.println("前台jsp提交上传控件的name属性:" + upload.getName());
          System.out.println("获取上传文件的后缀名:" + FilenameUtils.getExtension(upload.getOriginalFilename()));
    
          String webapp = request.getServletContext().getRealPath("/upload");
          System.out.println("上传文件保存到服务器webapp的路径:" + webapp);
    
          // 存放文件的路径
          File deskFile = new File(webapp, i++ + upload.getOriginalFilename());
          System.out.println("上传文件存放的最终路径:" + deskFile.getAbsolutePath());
    
          // 上传文件存放最终路径的父目录不存在,就创建一次
          File parentFile = deskFile.getParentFile();
          if (!parentFile.exists()) {
        parentFile.mkdirs();
          }
    
          // 方法1:使用commons-io工具包IOUtils类
          // 获取上传文件的流
          InputStream inputStream = upload.getInputStream();
          FileOutputStream output = new FileOutputStream(deskFile);
          // 把上传文件的inputStream拷贝到文件里面
          IOUtils.copy(inputStream, output);
          inputStream.close();
          output.close();
    
          // 方法2:使用MultipartFile.Transto 来保存上传的文件
          // upload.transferTo(deskFile);
    
          // 通过测试方法2会快点
    
          // 添加提示信息
          request.setAttribute("msg", "上传成功");
    
          // 记录结束上传文件的时间
          long endTime = System.currentTimeMillis();
          System.out.println("上传究竟用了多少时间:" + String.valueOf(endTime - startTime) + "ms");
        }
    
        // 直接转发到upload.jsp
        return "upload";
      }
    
    }
    

    上传300MB文件耗时比较

    • 使用commons-io工具包IOUtils类
      先以get的请求方式显示上传页面
      在以post请求方式处理上传的请求
      上传文件的名称:eclipse-jee-neon-1a-win32-x86_64.zip
      上传文件的大小:316290168(301MB)
      上传究竟用了多少时间:8944ms
      第二次上传究竟用了多少时间:11664ms
      第三次上传究竟用了多少时间:10703ms

    • 使用MultipartFile.transferTo来保存上传的文件
      先以get的请求方式显示上传页面
      在以post请求方式处理上传的请求
      上传文件的名称:eclipse-jee-neon-1a-win32-x86_64.zip
      上传文件的类型:application/zip
      上传文件的大小:316290168(301MB)
      上传究竟用了多少时间:219ms
      第二次上传究竟用了多少时间:276ms
      第三次上传究竟用了多少时间:286ms

    • 通过测试方法2会快点

    其他关联项目

    源码地址

    https://github.com/je-ge/spring

    如果觉得我的文章或者代码对您有帮助,可以请我喝杯咖啡。您的支持将鼓励我继续创作!谢谢!
    微信打赏
    支付宝打赏

  • 相关阅读:
    Clean Docker <none>:<none>
    Conservation Vs Non-conservation Forms of conservation Equations
    What are the differences between an LES-SGS model and a RANS based turbulence model?
    How to permanently set $PATH on Linux/Unix?
    tar解压命令
    C++ (P199—P211)多态 虚函数 抽象类
    C++ (P160—)多继承 二义性 虚基类 “向上转型”
    java与c++的访问权限的问题
    由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储
    C++ (P103—P154)
  • 原文地址:https://www.cnblogs.com/je-ge/p/6329469.html
Copyright © 2011-2022 走看看