SpringMVC 菜鸟教程 2 文件上传 MultipartFile

来源:互联网 发布:东东数据cf刷枪教程 编辑:程序博客网 时间:2024/05/20 12:23

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;@Controllerpublic 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.net/je_ge/article/details/53725357

源码地址

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

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

0 0
原创粉丝点击