第十一章 文件上传
文件上传
Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。
Spring 用 Jakarta Commons FileUpload 技术实现了一个 MultipartResolver 实现类:CommonsMultipartResovler
Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring 的文件上传功能,需现在上下文中配置 MultipartResolver
配置 MultipartResolver
defaultEncoding: 必须和用户 JSP 的 pageEncoding 属性一致,以便正确解析表单的内容
为了让 CommonsMultipartResovler 正确工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io 的类包添加到类路径下。导包
javaweb代码文件上传
spring 只要在springmvc配置文件中,编写一个配置,如配置文件上传解析器(MultipartResolver 9大组件之一)
commons 根据导入包的组件来决定 <!-- 根据9大组件初始化的代码 要求 id必须是multipartResolver 配置文件上传解析器--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--设置文件大小的最大值--> <property name="maxUploadSize" value="#{1024*1024*20}"/> <!--编码格式--> <property name="defaultEncoding" value="utf-8"></property> </bean> <h1>${msg }</h1> <form action="${ctp }/uploadInfo" method="post" enctype="multipart/form-data"> <input type="text" name="name"/> <input type="file" name="img"/> <input type="submit" value="提交"> </form> @RequestMapping(value = "/uploadInfo") public String downloadFile(@RequestParam(value = "name", required = false) String name, @RequestParam("img") MultipartFile img,Model mv) throws IOException { if(img==null){ mv.addAttribute("msg","文件上传失败"); } else { img.transferTo(new File("C:\\Users\\cznczai\\Desktop\\"+img.getOriginalFilename())); mv.addAttribute("msg","文件上传成功"); } System.out.println(name); System.out.println("文件项input标签的名字"+img.getName()); System.out.println("文件的名字"+img.getOriginalFilename()); return "hello"; }
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
思考多个文件上传
代码
@RequestMapping(value = "/uploadInfo") public String downloadFile(@RequestParam(value = "name", required = false) String name, @RequestParam("imgs") MultipartFile[] imgs, Model mv) throws IOException { for (MultipartFile img : imgs) { img.transferTo(new File("C:\\Users\\cznczai\\Desktop\\" + img.getOriginalFilename())); System.out.println(name); System.out.println("文件项input标签的名字" + img.getName()); System.out.println("文件的名字" + img.getOriginalFilename()); } return "hello"; }
表单的代码
《h1>${msg }《/h1> 《form action="${ctp }/uploadInfo" method="post" enctype="multipart/form-data"> 《input type="text" name="name"/> 《input type="file" name="imgs"/> 《input type="file" name="imgs"/> 《input type="file" name="imgs"/> 《input type="file" name="imgs"/> 《input type="submit" value="提交"> 《/form>