news 2026/7/28 14:28:23

SpringMVC实现文件上传

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringMVC实现文件上传

SpringMVC实现文件上传

一、文件上传的必要前提

1、form表单的enctype取值必须是:multipart/from-data (一般情况下的默认值是:application/x-www-form-urlencoded)

​ enctype:是表单请求正文的类型

2、method属性取值必须是Post

3、提供一个文件选择域

二、文件上传的原理分析

当form表单的enctype取值不是默认值后:request.getParameter()将失效。

enctype=“application/x-www-form-urlencoded”时,form表单的正文内容是:key=value&key=value&key=value

当form表单的enctype取值为Mutilpart/form-data时,请求正文内容就变成:

每一部分就是MIME类型描述的正文

-----------------------------7de1a433602ac 分界符 Content-Disposition: form-data; name="userName" 协议头 aaa 协议的正文 -----------------------------7de1a433602ac Content-Disposition: form-data; name="file"; filename="C:\Users\zhy\Desktop\fileupload_demofile\b.txt" Content-Type: text/plain 协议的类型(MIME 类型) bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb -----------------------------7de1a433602ac--

借助第三方组件实现文件上传:

使用 Commons-fileupload 组件实现文件上传,需要导入该组件相应的支撑 jar 包:Commons-fileupload 和
commons-io。commons-io 不属于文件上传组件的开发 jar 文件,但Commons-fileupload 组件从 1.1 版本开始,它工作时需要 commons-io 包的支持。

三、SpringMVC传统方式文件上传

SpringMVC框架提供了MultipartFile对象,该对象表示SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的 name属性名称相同。

前端jsp代码

<h3>SpringMVC上传文件</h3> <form action="user/fileupload2" method="post" enctype="multipart/form-data"> 选择上传文件:<input type="file" name="upload"/><br> <input type="submit" value="上传"/> </form>

控制器代码块

/* * 使用SpringMVC的方式进行文件上传 * */@RequestMapping("/fileupload2")publicStringfileupload2(HttpServletRequest request,MultipartFile upload)throwsIOException{System.out.println("SpringMVC文件上传");String path=request.getSession().getServletContext().getRealPath("/uploads/");File file=newFile(path);if(!file.exists()){//创建文件夹file.mkdir();}String filename=upload.getOriginalFilename();String uuid=UUID.randomUUID().toString().replace("-","");filename=uuid+"-"+filename;upload.transferTo(newFile(path,filename));return"success";}

配置文件解析器springmvc.xml

<!-- 配置文件解析器对象,要求id名称必须是multipartResolver --><beanid="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><propertyname="maxUploadSize"value="10485760"/></bean>

注意:文件上传的解析器 id是固定的,不能起别的名称,否则无法实现请求参数的绑定。(不光是文件,其他字段也将无法绑定) ,并且前端上传文件的input的name值一定要和控制器中的MultipartFile upload的名称一致,否则无法实现。

四、springmvc跨服务器方式的文件传输

传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。 并且上传完成之后,浏览器可能跳转。

jsp代码块

<form action="/user/fileupload3" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="upload" /><br/> <input type="submit" value="上传" /> </form>

控制器代码块

/** * 跨服务器文件上传 * @return */@RequestMapping("/fileupload3")publicStringfileuoload3(MultipartFile upload)throwsException{System.out.println("跨服务器文件上传...");// 定义上传文件服务器路径String path="http://localhost:9090/uploads/";// 说明上传文件项// 获取上传文件的名称String filename=upload.getOriginalFilename();// 把文件的名称设置唯一值,uuidString uuid=UUID.randomUUID().toString().replace("-","");filename=uuid+"_"+filename;// 创建客户端的对象Client client=Client.create();// 和图片服务器进行连接WebResource webResource=client.resource(path+filename);// 上传文件webResource.put(upload.getBytes());return"success";}

导入jar包,配置pom.xml文件

<!-- 配置文件上传解析器 --><beanid="multipartResolver"<!--id的值是固定的-->class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设置上传文件的最大尺寸为 5MB --><propertyname="maxUploadSize"><value>5242880</value></property></bean>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 14:26:26

机器学习:数据预处理之独热编码(One-Hot)

数据预处理之独热编码(One-Hot&#xff09; 转载https://www.imooc.com/article/35900 在机器学习算法中&#xff0c;我们经常会遇到分类特征&#xff0c;例如&#xff1a;人的性别有男女&#xff0c;祖国有中国&#xff0c;美国&#xff0c;法国等。 这些特征值并不是连续的…

作者头像 李华
网站建设 2026/7/28 14:24:11

FF14智能钓鱼计时器:渔人的直感让你的钓鱼效率翻倍提升

FF14智能钓鱼计时器&#xff1a;渔人的直感让你的钓鱼效率翻倍提升 【免费下载链接】Fishers-Intuition 渔人的直感&#xff0c;最终幻想14钓鱼计时器 项目地址: https://gitcode.com/gh_mirrors/fi/Fishers-Intuition 还在为错过幻海流的关键咬钩时机而烦恼吗&#xff…

作者头像 李华
网站建设 2026/7/28 14:23:58

JS总结

JS思维导图 JS总结 JS总结

作者头像 李华
网站建设 2026/7/28 14:23:57

5分钟部署Sunshine:构建家庭云游戏服务器的终极完整指南

5分钟部署Sunshine&#xff1a;构建家庭云游戏服务器的终极完整指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 你是否渴望在任何设备上畅玩高性能PC游戏&#xff1f;厌倦了在…

作者头像 李华
网站建设 2026/7/28 14:23:50

AI语音机器人怎么选?意图识别、情绪感知、低延时3大核心能力

文章摘要AI语音机器人的选型难点在于&#xff1a;所有厂商都说自己“意图识别准确率95%以上”“支持情绪感知”“毫秒级响应”&#xff0c;但POC测试时发现指标口径各不相同&#xff0c;Demo表现与生产环境差距巨大。本文从技术原理出发&#xff0c;拆解意图识别、情绪感知、端…

作者头像 李华