1,文件上传要求
文件上传的三个必要前提:
- 表单提交方式必须为post
- 表单的enctype属性值必须为mutipart/form-data
- 表单必须有一个文件上传的按钮
文件上传的原理简单分析:
- 当表单的enctype属性的取值为默认值时,请求体内容为一组键值对:
- key=value&key=value&key=value….
- 当表单的enctype属性的取值为mutilpart/form-data后,请求体内容就变成:
- 每一部分都是MIME类型描述的正文
2,SpringMVC接收上传过来的文件
①导入坐标
<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.4</version>
</dependency>
②配置文件解析器
<!--配置文件上传解析器
注意:id必须为multipartResolver
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置默认字符编码-->
<property name="defaultEncoding" value="utf-8"/>
<!--一次请求上传的文件的总大小的最大值,单位是字节-->
<property name="maxUploadSize" value="#{1024*1024*1000}"/>
<!--每个上传文件大小的最大值,单位是字节-->
<property name="maxUploadSizePerFile" value="#{1024*1024*50}"/>
</bean>
③表单页面
<form action="/login" method="post">
<input type="text" name="name"><br>
<input type="password" name="password"><br>
<input type="submit">
</form>
④控制器
@RequestMapping("/upload")
public String load(MultipartFile load) throws IOException {
load.transferTo(new File("test.txt"));
return "forward:/static/ok.html";
}
注意:表单中,name的名字要和控制器的方法参数名一致。
3,MultipartFile的常见用法
获取上传文件的原名
String originalFilename = load.getOriginalFilename();
获取文件类型的MIME类型
String contentType = load.getContentType();
获取上传文件的大小
long size = load.getSize();
获取对应上传文件的输入流
InputStream inputStream = load.getInputStream();