SpringMVC上传文件的三种实现方式

发布时间 - 2026-01-10 22:12:28    点击率:

SpringMVC上传文件的三种实现方式,直接上代码吧,大伙一看便知

前台:

<%@ page language="java" contentType="text/html; charset=utf-8"

  pageEncoding="utf-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>Insert title here</title>

</head>

<body>

<form name="serForm" action="/SpringMVC006/fileUpload" method="post" enctype="multipart/form-data">

<h1>采用流的方式上传文件</h1>

<input type="file" name="file">

<input type="submit" value="upload"/>

</form>

<form name="Form2" action="/SpringMVC006/fileUpload2" method="post" enctype="multipart/form-data">

<h1>采用multipart提供的file.transfer方法上传文件</h1>

<input type="file" name="file">

<input type="submit" value="upload"/>

</form>

<form name="Form2" action="/SpringMVC006/springUpload" method="post" enctype="multipart/form-data">

<h1>使用spring mvc提供的类的方法上传文件</h1>

<input type="file" name="file">

<input type="submit" value="upload"/>

</form>

</body>

</html> 

配置:

<!-- 多部分文件上传 -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

   <property name="maxUploadSize" value="104857600" />

   <property name="maxInMemorySize" value="4096" />

   <property name="defaultEncoding" value="UTF-8"></property>

</bean> 

后台:

方式一:

/*

   * 通过流的方式上传文件

   * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象

   */

  @RequestMapping("fileUpload")

  public String fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {

     

     

    //用来检测程序运行时间

    long startTime=System.currentTimeMillis();

    System.out.println("fileName:"+file.getOriginalFilename());

     

    try {

      //获取输出流

      OutputStream os=new FileOutputStream("E:/"+new Date().getTime()+file.getOriginalFilename());

      //获取输入流 CommonsMultipartFile 中可以直接得到文件的流

      InputStream is=file.getInputStream();

      int temp;

      //一个一个字节的读取并写入

      while((temp=is.read())!=(-1))

      {

        os.write(temp);

      }

      os.flush();

      os.close();

      is.close();

     

    } catch (FileNotFoundException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

    }

    long endTime=System.currentTimeMillis();

    System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");

    return "/success"; 

  } 

方式二:

/*

   * 采用file.Transto 来保存上传的文件

   */

  @RequestMapping("fileUpload2")

  public String fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {

     long startTime=System.currentTimeMillis();

    System.out.println("fileName:"+file.getOriginalFilename());

    String path="E:/"+new Date().getTime()+file.getOriginalFilename();

     

    File newFile=new File(path);

    //通过CommonsMultipartFile的方法直接写文件(注意这个时候)

    file.transferTo(newFile);

    long endTime=System.currentTimeMillis();

    System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");

    return "/success"; 

  } 

方式三:

/*

   *采用spring提供的上传文件的方法

   */

  @RequestMapping("springUpload")

  public String springUpload(HttpServletRequest request) throws IllegalStateException, IOException

  {

     long startTime=System.currentTimeMillis();

     //将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)

    CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(

        request.getSession().getServletContext());

    //检查form中是否有enctype="multipart/form-data"

    if(multipartResolver.isMultipart(request))

    {

      //将request变成多部分request

      MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;

      //获取multiRequest 中所有的文件名

      Iterator iter=multiRequest.getFileNames();

       

      while(iter.hasNext())

      {

        //一次遍历所有文件

        MultipartFile file=multiRequest.getFile(iter.next().toString());

        if(file!=null)

        {

          String path="E:/springUpload"+file.getOriginalFilename();

          //上传

          file.transferTo(new File(path));

        }

         

      }

      

    }

    long endTime=System.currentTimeMillis();

    System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");

  return "/success"; 

  } 

我们看看测试上传的时间:

第一次我用一个4M的文件:

fileName:test.rar

方法一的运行时间:14712ms

fileName:test.rar

方法二的运行时间:5ms

方法三的运行时间:4ms 

第二次:我用一个50M的文件

方式一进度很慢,估计得要个5分钟

方法二的运行时间:67ms

方法三的运行时间:80ms

从测试结果我们可以看到:用springMVC自带的上传文件的方法要快的多!

对于测试二的结果:可能是方法三得挨个搜索,所以要慢点。不过一般情况下我们是方法三,因为他能提供给我们更多的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# springmvc实现上传  # spring  # mvc  # 文件上传  # springmvc  # 上传  # SpringMVC文件上传 多文件上传实例  # Spring MVC中上传文件实例  # springMVC配置环境实现文件上传和下载  # SpringMVC文件上传的配置实例详解  # springMVC结合AjaxForm上传文件  # springMVC实现前台带进度条文件上传的示例代码  # spring mvc实现文件上传并携带其他参数的示例  # 在SpringMVC框架下实现文件的上传和下载示例  # Spring MVC 文件上传的示例代码  # 上传文件  # 我用  # 遍历  # 给我们  # 可以看到  # 三种  # 可以直接  # 这个时候  # 他能  # 自带  # 很慢  # 要快  # 大家多多  # 便知  # 慢点  # 过流  # enctype  # multipart 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel如何使用查询构建器?(Query Builder高级用法)  长沙企业网站制作哪家好,长沙水业集团官方网站?  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Swift中switch语句区间和元组模式匹配  常州企业网站制作公司,全国继续教育网怎么登录?  如何获取免费开源的自助建站系统源码?  如何在IIS中新建站点并配置端口与IP地址?  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  西安专业网站制作公司有哪些,陕西省建行官方网站?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  ,南京靠谱的征婚网站?  如何快速生成专业多端适配建站电话?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何用腾讯建站主机快速创建免费网站?  如何在Windows 2008云服务器安全搭建网站?  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel定时任务怎么设置_Laravel Crontab调度器配置  JavaScript如何实现继承_有哪些常用方法  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】  Java垃圾回收器的方法和原理总结  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  昵图网官方站入口 昵图网素材图库官网入口  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  如何彻底删除建站之星生成的Banner?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何快速搭建支持数据库操作的智能建站平台?  如何用好域名打造高点击率的自主建站?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  如何快速完成中国万网建站详细流程?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Laravel如何处理表单验证?(Requests代码示例)  如何在VPS电脑上快速搭建网站?  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  简单实现jsp分页  EditPlus中的正则表达式实战(5)  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑