第一节:SpringMVC 的文件上传
2021/12/4 23:18:06
本文主要是介绍第一节:SpringMVC 的文件上传,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、SpringMVC 的文件上传
1、Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。 2、Spring 用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类:CommonsMultipartResolver 3、SpringMVC 上下文中默认没有装配 MultipartResolver,因此默认情况下不能处理文件的上传工作,如果想要使用 Spring 的文件上传功能,需要在上下文中配置 MultipartResolver。 MultipartFile 接口:
继承结构:
4、配置 MultipartResolver 其中有两个常用属性: defaultEncoding:必须和用户 JSP 的 pageEncoding 属性一直,以便于正确解析表单的内容。 maxUploadSize:设置上传文件的最大文件的大小(单位是字节) 注意:为了让 CommonsMultipartResolver 正确工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io 的类包添加到类路径下。
二、文件上传示例
1、导入 jar 包
commons-fileupload-1.2.1.jar commons-io-2.0.jar
Maven 方式:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
2、配置文件解析器
在SpringMVC中配置一个文件上传解析器:
<!-- 配置文件上传解析器,id必须是 multipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--设置上传文件的最大值--> <property name="maxUploadSize" value="#{1024*1024*1024}"/> <!--设置默认编码--> <property name="defaultEncoding" value="utf-8"/> </bean>
3、页面表单
<form action="${ctp}/upload" method="post" enctype="multipart/form-data"> 用户头像:<input type="file" name="headerImg" /><br> 用户名称:<input type="text" name="userName" /><br> <input type="submit" value="提交"> </form>
4、控制器方法
@RequestMapping(value = "/upload") public String upload(@RequestParam(value = "userName", required = false) String userName, @RequestParam(value = "headerImg") MultipartFile uploadFile, Model model) { System.out.println("上传的文件的信息:" + uploadFile); System.out.println(uploadFile.getName()); System.out.println(uploadFile.getOriginalFilename()); //文件保存 File localFile = new File("H:\\111学习\\" + uploadFile.getOriginalFilename()); try { uploadFile.transferTo(localFile); model.addAttribute("msg", "文件上传成功!"); } catch (IOException e) { model.addAttribute("msg", "文件上传失败!" + e.getMessage()); } return "forward:/index.jsp"; }
5、小结
(1)文件上传表单准备, enctype="multipart/form-data"
(2)导入 commons-fileupload
(3)只要在 SpringMVC 配置文件中,配置一个文件上传解析器 MultipartResolver
(4)文件上传请求处理
只需要在处理器入参写一个@RequestParam(value = "headerImg") MultipartFile uploadFile 封装当前文件的信息,可以直接保存
三、多文件上传
当有多个 File 需要上传时,可以使用数组来接收:
页面表单:
<form action="${ctp}/uploadFiles" method="post" enctype="multipart/form-data"> 用户头像:<input type="file" name="headerImg" /><br> 用户头像:<input type="file" name="headerImg" /><br> 用户头像:<input type="file" name="headerImg" /><br> 用户头像:<input type="file" name="headerImg" /><br> 用户名称:<input type="text" name="userName" /><br> <input type="submit" value="提交"> </form>
控制器方法:
/** * 多文件上传 * @param userName * @param uploadFile * @param model * @return */ @RequestMapping(value = "/uploadFiles") public String uploadFiles(@RequestParam(value = "userName", required = false) String userName, @RequestParam(value = "headerImg") MultipartFile[] uploadFile, Model model) { System.out.println("上传的文件的信息:" + uploadFile); for (MultipartFile multipartFile : uploadFile) { if (!multipartFile.isEmpty()) { //获取上传文件的名称 String fileName = multipartFile.getOriginalFilename(); //使用 UUID 或时间戳来给文件命名,防止重名 String finalFileName = UUID.randomUUID() +fileName.substring(fileName.lastIndexOf(".")); //设置文件保存的位置 String path = "H:\\111学习" + File.separator + finalFileName; File newFile = new File(path); try { //将文件从原处复制到目标处 multipartFile.transferTo(newFile); model.addAttribute("msg", "文件上传成功!"); } catch (IOException e) { model.addAttribute("msg", "文件上传失败!" + e.getMessage()); } } } return "forward:/index.jsp"; }
如果表单里面的 file 的name 值不一样,可以在入参再写一个 MultipartFile 进行接收即可。
这篇关于第一节:SpringMVC 的文件上传的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能
- 2024-11-28如何高效管理数字化转型项目
- 2024-11-28SMART法则好用吗?有哪些项目管理工具辅助实现?
- 2024-11-28深度剖析:6 款办公软件如何构建设计团队项目可视化管理新生态?
- 2024-11-28HTTP缓存课程:新手入门指南
- 2024-11-28实战丨证券 HTAP 混合业务场景的难点问题应对