0%

(八)SpringMVC学习笔记-文件上传

Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring 用Jakarta Commons FileUpload 技术实现了一个MultipartResolver 实现类:CommonsMultipartResovler

Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 Spring的文件上传功能,需现在上下文中配置 MultipartResolver

同时,为了让 CommonsMultipartResovler 正确工作,必须先将 Jakarta Commons FileUpload 及 Jakarta Commons io的类包添加到类路径下。

示例:

1.首先需要加入相关的Jar包(commons-fileupload)
在这里插入图片描述
2.然后就是MVC配置文件中配置MultipartResovler,具体如下所示:

1
2
3
4
5
6
7
8
<!-- 配置 MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- defaultEncoding: 必须和用户 JSP 的 pageEncoding
属性一致,以便正确解析表单的内容 -->
<!-- 还有好多属性,不一一列举了 -->
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="102400"></property>
</bean>

3.在请求页面index.jsp编写如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 模拟文件上传 -->
<!--
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。
就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,
特殊符号转换为 ASCII HEX 值)。
multipart/form-dat:不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
-->
<form action="testMultipartResolver" method="POST" enctype="multipart/form-data">
File:<input type="file" name="file"/>
Desc:<input type="text" name="desc"/>
<input type="submit"value="Submit"/>
</form>

4.在控制器类中编写目标方法,用于处理上传请求。

1
2
3
4
5
6
7
8
9
10
11
@RequestMapping("/testMultipartResolver")
public String testMultipartResolver(@RequestParam("desc") String desc,
@RequestParam("file") MultipartFile file) throws IOException {
//获取上传文件的描述文本
System.out.println("decs:" + desc);
//获取原始文件名
System.out.println("OriginalFilename:" + file.getOriginalFilename());
//获取文件的输入流对象
System.out.println("InputStream:" + file.getInputStream());
return "success";
}

5.输出结果如下所示

1
2
3
decs:my describle
OriginalFilename:demo.txt
InputStream:java.io.ByteArrayInputStream@2e887a00
------ 本文结束------