使用MultipartFile实现文件上传_SpringMVC

文章目录

          • 一、单文件上传
            • 1. 创建上传表单
            • 2. 新增配置
            • 3. 编写上传控制类
            • 4. 接收参数
            • 5.文件保存路径
            • 6. 转存文件
          • 二、多文件上传
            • 2.1. 创建上传表单
            • 2.2. 编写上传控制类
            • 2.3. 保存文件
          • 三、MultipartFile类常用方法

这篇文章主要为大家详细介绍了SpringMVC使用MultipartFile实现文件上传功能

一、单文件上传
  • 前端(单文件)
1. 创建上传表单
<body> 
<h2>文件上传实例</h2> <form action="fileUpload.html" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="file"> <input type="submit" value="提交">  
</form> </body> 

注意要在form标签中加上enctype="multipart/form-data"表示该表单是要处理文件的,这是最基本的东西,很多人会忘记然而当上传出错后则去找程序的错误,却忘了这一点。

2. 新增配置

后端
SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file

<!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --><beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"p:defaultEncoding="UTF-8"p:maxUploadSize="5400000"p:uploadTempDir="fileUpload/temp"> 
</beans:bean> 

其中属性详解:
defaultEncoding=“UTF-8” 是请求的编码格式,默认为iso-8859-1
maxUploadSize=“5400000” 是上传文件的大小,单位为字节
uploadTempDir=“fileUpload/temp” 为上传文件的临时路径

3. 编写上传控制类

1.创建一个控制类: FileUploadController和一个返回结果的页面 list.jsp
2.编写提交表单的action

//通过Spring的autowired注解获取spring默认配置的request @Autowiredprivate HttpServletRequest request; /*** * 上传文件 用@RequestParam注解来指定表单上的file为MultipartFile * * @param file * @return */@RequestMapping("fileUpload") public String fileUpload(@RequestParam("file") MultipartFile file) { // 判断文件是否为空 if (!file.isEmpty()) {try { // 文件保存路径 String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"+ file.getOriginalFilename(); // 转存文件 file.transferTo(new File(filePath)); } catch (Exception e) { e.printStackTrace(); } } // 重定向 return "redirect:/list.html"; } /*** * 读取上传文件中得所有文件并返回 * * @return */@RequestMapping("list") public ModelAndView list() { String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"; ModelAndView mav = new ModelAndView("list"); File uploadDest = new File(filePath); String[] fileNames = uploadDest.list(); for (int i = 0; i < fileNames.length; i++) { //打印出文件名 System.out.println(fileNames[i]); } return mav; } 
4. 接收参数

使用SpringMVC注解RequestParam来指定表单中的file参数;

5.文件保存路径

指定一个用于保存文件的web项目路径

6. 转存文件

通过MultipartFile的transferTo(File dest)这个方法来转存文件到指定的路径。

到此基本的单文件上传就结束了。

二、多文件上传

多文件上传其实很简单,和上传其他相同的参数如checkbox一样,表单中使用相同的名称,然后action中将MultipartFile参数类定义为数组就可以。

2.1. 创建上传表单

创建一个上传多文件的表单:

<body> <h2>上传多个文件 实例</h2> <form action="filesUpload.html" method="post"enctype="multipart/form-data"> <p> 选择文件:<input type="file" name="files"> <p> 选择文件:<input type="file" name="files"> <p> 选择文件:<input type="file" name="files"> <p> <input type="submit" value="提交"> </form> 
</body> 
2.2. 编写上传控制类
编写action: @RequestMapping("filesUpload") public String filesUpload(@RequestParam("files") MultipartFile[] files) { //判断file数组不能为空并且长度大于0 if(files!=null&&files.length>0){ //循环获取file数组中得文件 for(int i = 0;i<files.length;i++){ MultipartFile file = files[i]; //保存文件 saveFile(file); } } // 重定向 return "redirect:/list.html"; }
2.3. 保存文件

编写处理表单的action,将原来保存文件的方法单独写一个方法出来方便共用:

/*** * 保存文件 * @param file * @return */private boolean saveFile(MultipartFile file) { // 判断文件是否为空 if (!file.isEmpty()) { try { // 文件保存路径 String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"+ file.getOriginalFilename(); // 转存文件 file.transferTo(new File(filePath)); return true; } catch (Exception e) { e.printStackTrace(); } } return false; } 
三、MultipartFile类常用方法

String getContentType()//获取文件MIME类型
InputStream getInputStream()//后去文件流
String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名
long getSize() //获取文件的字节大小,单位byte
boolean isEmpty() //是否为空
void transferTo(File dest) //保存到一个目标文件中。
以上就是本文的全部内容,希望对大家的学习有所帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决vue里iscroll(better-scroll)点击触发两次和初始化无法滚动问题!

这两个插件我用过好几次&#xff0c;有时候很顺利&#xff0c;不顺利的时候真的很麻烦&#xff0c;一直无法滚动&#xff0c;明明style里已经有样式了&#xff0c;就是滚动不了。 先说下在vue里的三种的引入方式&#xff1a; 在index.html文件里通过script的方式引入进来&…

云原生应用万节点分钟级分发协同实践

导读&#xff1a;2019 年天猫 双11&#xff0c;阿里巴巴核心系统首次实现 100% 上云。面对全球最大的交易洪峰&#xff0c;阿里云扛住了每秒 54.4 万笔的交易峰值&#xff0c;这是“云原生”与“天猫全球狂欢节”的一次完美联名。 &#xff08;图为 2019 年天猫 双11 成交额&am…

为啥Underlay才是容器网络的最佳落地选择

导语&#xff1a; 几年前&#xff0c;当博云启动自研容器网络研发的时候&#xff0c;除了技术选型的考虑&#xff0c;我们对于先做 Underlay 还是 Overlay 网络也有过深度的讨论。当时的开源社区以及主流容器厂商&#xff0c;多数还是以 Overlay 网络方案为主&#xff0c;但在我…

oracle用户编辑文件中文乱码

文章目录一、分析定位1. 现象2. 查看当前编码3. 配置文件现状二、解决方案2.1. 编辑配置文件2.2. 调整2.3. 刷新环境变量2.4. 效果图2.5. 配置文件源码一、分析定位 1. 现象 2. 查看当前编码 登录oracle用户&#xff0c;查看当前oracle用户下的编码 [oraclelocalhost ~]$ ec…

今年圣诞,麋鹿第一次请假

年末的圣诞节来啦~~&#xff01; 但我们的圣诞老人为什么有点低落&#xff1f;&#xff1f; 是在愁信太多&#xff1f;没地儿放&#xff1f; 不会是看不懂我信上的“鬼画符”吧.. 难道是在忌惮空中的雾霾&#xff1f;哈哈~ 圣诞老人&#xff1a;o(╥﹏╥)o 不不不&#xf…

支付宝和微信的JSSDK发起支付

支付宝&#xff1a; 引入alipay的jsapi文件&#xff1a; <script src"https://a.alipayobjects.com/g/h5-lib/alipayjsapi/3.0.6/alipayjsapi.min.js"></script> 点击支付按钮调用的后台创建交易的接口&#xff0c;返回tradeNO this.API.trade_create…

高德网络定位算法的演进

1.导读 GPS定位精度高&#xff0c;且早已成为移动设备标配&#xff0c;但GPS也具有一些难以克服的缺陷&#xff0c;包括&#xff1a; 冷启动时间长。GPS启动时&#xff0c;需要进行搜星&#xff0c;锁定卫星信号&#xff0c;然后再进行位置技术&#xff0c;这个过程可能会达到…

获取当天日期、昨天日期

package com.gblfy.util;import org.junit.Test; import org.springframework.stereotype.Component;import java.text.SimpleDateFormat; import java.util.Date;Component public class DateDeal {//日期格式化static SimpleDateFormat simpleDateFormat new SimpleDateForm…

疫情之下网络安全如何保障?Akamai防护方案前来“保驾护航”

2020年春天&#xff0c;以5G、人工智能、云计算为代表的“新基建”蔚然成风&#xff0c;着眼国家数字经济体系建设&#xff0c;打造数字经济体系底座的“新基建”&#xff0c;无疑成为中国经济整体应对未来发展的核心方案。然而&#xff0c;面临“新基建”与企业数字化进程的突…

2020将至,谈谈中小企业创业的那些事儿

2019正迎来尾声&#xff0c;在创业这场轰轰烈烈的旅途中&#xff0c;有的人名利双收&#xff0c;有的人饱受非议。一入创业深似海&#xff0c;在创业赛道上&#xff0c;很多公司完成了从0到1&#xff0c;却死在从1到100的路上。而小程序的出现&#xff0c;让移动互联网创业走向…

axios从安装到使用的教程

安装axios: npm install --save axios 目录结构: 红框部分是接口文件&#xff1a; appApi.js是存放接口的文件 import Vue from vue import axios from axiosexport default {// 获取分类show_category: function () {return axios.post(/point-api-show_category);},// 获…

yarn全局安装vue/cli vue不是内部命令

yarn全局安装vue/cli vue不是内部命令 在使用 yarn global add vue/cli安装 vue/cli之后 执行vue --version 报错:‘vue’ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件 解决方案&#xff1a; 命令行输入 yarn global bin 然后把得到的地址添加到环境变量…

嘘,这是手淘双11 GMV 暴涨的秘密

阿里妹导读&#xff1a;信息流作为手淘的一大流量入口&#xff0c;对手淘的浏览效率转化和流量分发起到至关重要的作用。在探索如何给用户推荐其喜欢的商品这条路上&#xff0c;我们首次将端计算大规模应用在手淘客户端&#xff0c;通过端侧丰富的用户特征数据和触发点&#xf…

vuex从安装到使用的教程

vuex的安装 npm install vuex --save或cnpm install vuex --save main.js引入vuex import Vue from vue import Vuex from vuex import store from ./vuex/storeVue.use(Vuex) vuex的目录结构和store.js的代码 store.js的代码&#xff08;异步和同步的代码均留下两个方法&am…

未来,仅凭几个前端工程师,就能 hold 住一家企业吗?

阿里妹导读&#xff1a;微前端架构旨在解决单体应用在一个相对长的时间跨度下&#xff0c;由于参与的人员、团队的增加&#xff0c;从一个普通应用演变成一个巨石应用(Frontend Monolith)&#xff0c;随之而来的应用不可维护问题。这类问题在企业级 Web 应用中尤为常见。今天&a…

报告显示,媒体行业已成撞库攻击常见目标

一项报告显示&#xff0c;在2018年1月到2019年12月间&#xff0c;全球媒体行业共遭受了170亿次撞库攻击。 这份名为《Akamai 2020年互联网状况/媒体行业中的撞库攻击》的报告还发现&#xff0c;在报告期间内观察到的880亿起撞库攻击中&#xff0c;有20%针对的是媒体公司。 该…

yarn : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本

文章目录1. 现象2. 授权安全策略3. 重新执行命令1. 现象 2. 授权安全策略 若要在本地计算机上运行您编写的未签名脚本和来自其他用户的签名脚本&#xff0c;请使用以下命令将计算机上的 执行策略更改为 RemoteSigned 执行&#xff1a; set-ExecutionPolicy RemoteSigned查看执…

标记 (TAG) 您的 k8s 集群资源

标签的基本知识 标签是资源Meta信息&#xff0c;标签是一些充当元数据的词和短语&#xff0c;支持用户自定义和系统预制。每个标签都包含一个键&#xff08;Key&#xff09;和一个值&#xff08;Value&#xff09;。标签是一种资源的属性描述。标签与资源是 多对多的关系。标签…

CentOs7搭建PHP环境

######提示&#xff1a;wget 下载URL提示无法建立SSL连接,进行如下教程操作 https://blog.csdn.net/xinghun_4/article/details/50500331 reboot 重启虚拟机一键安装所有编译工具 gcc yum groupinstall "Development Tools" "Server Platform Development&quo…

央视315曝光SDK事件,应用开发者如何避坑?

7月16日晚&#xff0c;央视315晚会拉开大幕&#xff0c;再次敲响了消费领域的警钟。据央视报道&#xff0c;上海市消费者权益保护委员会委托第三方对市场上的App进行检测&#xff0c;发现某些第三方开发的SDK包存在违规收集用户个人信息的情况。日前&#xff0c;工信部已要求严…