springmvc上传文件过程(c菜鸟教程)

UploadControllerpackagecom.jege.spring.mvc;importjava.io.File;importjava.io.FileOutputStream;importjava.io.InputStream;importjavax.servlet.http.HttpServletRequest;importorg.apache.co

大家好,又见面了,我是你们的朋友全栈君。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128299.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm修改字体大小和主题_pycharm调字体

    pycharm修改字体大小和主题_pycharm调字体PyCharm主题、字体设置从菜单栏File–>Settings,打开PyCharm设置界面点击Appearance&Behavior–>Appearance,设置IDE主题,推荐Darcula,主要是因为黑色比较不伤眼点击Editor–>Font设置代码编辑器的字体和字号字体(Font)推荐使用DejaVuSansMono。要是找不到这种字体,看见那个绿色的框了吗?取消showonlymonospacedfon

    2022年8月26日
    5
  • Iocomp控件教程之Analog Display—模拟显示控件(优于EDIT控件)[通俗易懂]

    Iocomp控件教程之Analog Display—模拟显示控件(优于EDIT控件)[通俗易懂]AnalogDisplay是简洁的显示控件,用于显示指定精确度和单位的模拟值(实数),可以将精确度设置为0,使显示结果为整数。第一步:建立MFC对话框第二步:插入AnalogDisplay控件第三步:单击控件-鼠标右键-添加成员变量完成添加变量的同时,控件的.h、.c文件也会被添加到程序中主要成员函数介绍://背景颜色I_analo

    2022年7月17日
    14
  • AUTOCAD 二次开发学习笔记

    AUTOCAD 二次开发学习笔记图层处理 16 条消息 C 之 CAD 二次开发实例 13 图层操作 yzk 的博客 CSDN 博客

    2025年6月7日
    3
  • VCLibs库文件包下载_怎么使用已有的加速包

    VCLibs库文件包下载_怎么使用已有的加速包本文以MDI应用程序为例说明如何在已有的VC++工程中使用BCG界面库,我的开发环境为VS2003。1、将BCG/BCGCBPro目录路径添加到“项目属性->C/C++->常规->附加包含目录”中,同时将BCG/Bin目录路径添加到“项目属性->链接器->常规->附加库目录”中。2、确保在CWinApp派生类(设为CMyApp)的InitInstance()成员函数中调用AfxOl

    2022年10月8日
    2
  • 「从零单排canal 05」 server模块源码解析

    「从零单排canal 05」 server模块源码解析

    2020年11月19日
    180
  • Sublime Text3使用Package Control 报错There Are No Packages Available For Installation

    Sublime Text3使用Package Control 报错There Are No Packages Available For Installation在使用sublime时,有时候我们希望将代码复制出来后仍然是高亮显示,这样我们便需要安装SublimeHighLight插件,在安装SublimeHighLight插件之前,我们应该先安装PackageControl插件!1、PackageControl插件作用:能够利用这个插件安装很多Sublime的插件!2、SublimeHighLight插件作用:能让代码更好地展示其高亮性!我先从网上

    2022年7月11日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号