SpringMVC 菜鸟教程 2 文件上传 MultipartFile

编程知识 行业动态 更新时间:2024-06-13 00:22:04

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.apachemons.io.FilenameUtils;
import org.apachemons.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会快点

其他关联项目

  • SpringMVC 菜鸟教程 1 文件上传-配置
    http://blog.csdn/je_ge/article/details/53725357

源码地址

https://github/je-ge/spring

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

更多推荐

SpringMVC 菜鸟教程 2 文件上传 MultipartFile

本文发布于:2023-04-01 16:32:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/bc419c3b5bf7be77fcce621e69760dd6.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:菜鸟   文件上传   教程   SpringMVC   MultipartFile

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!