一、文件上传的原理:
二、实现:
2.1导入依赖:增加commons-fileupload
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2.2创建页面,在页面上提供表单:要符合文件上传的三要素
如果要实现文件上传:
客户端要满足一些条件:三要素
1. 表单提交方式是POST
2. 表单里要有 input type="file"
3. 表单form标签上要加 enctype="multipart/form-data"
如果不设置这个属性值,表单只会提交文件名称,而不会上传文件数据
2.3 接收文件
@Controller
@RequestMapping("/file")
public class Demo04FileController {
/**
* 要接收客户端上传的文件,要求:
* 1. 方法参数名称 和 客户端提交的表单参数名称 要相同
* 2. 接收文件数据,参数类型是MultipartFile
* 3. 在xml里配置文件解析器:CommonsMultipartResolver,把这个类注册bean对象放到IoC容器里
*/
@RequestMapping("/upload1")
public String upload1(String nickname, MultipartFile avatar) throws IOException {
System.out.println(nickname);
//1. 文件重命名
//1.1 获取文件的原始名称 aaa.txt
String originalFilename = avatar.getOriginalFilename();
//1.2 截取得到文件的后缀名 .txt
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
//1.3 生成一个新文件名称,文件名称不能重复。使用uuid(生成随机字符串的算法,生成32位长的随机字符串,每个字符是16进制的,几乎是永不重复的)
String filename = UUID.randomUUID().toString() + suffix;
//2. 把文件数据存储到磁盘上
avatar.transferTo(new File("E:\\" + filename));
return "success";
}
2.4配置文件解析器
<!-- 配置文件解析器。id值必须是multipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
<!--一次请求上传文件的最大尺寸,单位字节。-1表示不限制大小-->
<property name="maxUploadSize" value="-1"/>
<!--上传的每个文件的最大尺寸,单位字节。-1表示不限制-->
<property name="maxUploadSizePerFile" value="-1"/>
</bean>