SpringMVC--13 文件上传
Posted Moon&&Dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC--13 文件上传相关的知识,希望对你有一定的参考价值。
16 文件上传
在SpringMVC中实现上传文件,首先我们需要导入一个工具包
commons-fileupload
16.1 maven依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
16.2 配置文件上传
当我们把依赖导入后,在Spring中需要简单的进行一下配置,这里也是氛围xml文件和JavaConfig来配置
16.2.1 基于xml
<!--
注册一个bean,该bean为Spring的文件上传解析器,
虽然这个类是Spring写的,但是是依赖于commons-fileupload
所以我们需要导入依赖
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置文件上传的编码-->
<property name="defaultEncoding" value="UTF-8"/>
<!--一次请求中文件大小,单位byte,默认无限大-->
<property name="maxUploadSize" value="1024000"/>
<!--一次请求中设计到多个请求流,每个文件流的大小限制,单位byte,默认无限大-->
<property name="maxUploadSizePerFile" value="1024000"/>
</bean>
16.2.2 基于JavaConfig
@Bean
public CommonsMultipartResolver multipartResolver() {
// 实例文件上传解析器
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
// 设置文件上传编码
resolver.setDefaultEncoding("UTF-8");
// 设置文件上传大小
resolver.setMaxUploadSize(1024000);
// 设置耽搁文件大小
resolver.setMaxUploadSizePerFile(1024000);
// 将解析器交给IOC接管
return resolver;
}
16.3 编写Controller
在控制器去接收文件的话,我们需要使用Spring为我们提供的
MultipartFile
对象来接收
@RestController
@RequestMapping("/file")
public class FileUploadController {
/**
* 文件目录
*/
private static final String LOCAL_PATH = "/Users/xiaolong/Desktop";
/**
* 文件夹名
*/
private static final String LOCAL_DIR_NAME = "files";
@PostMapping
public String fileUpload(MultipartFile file) {
return file.isEmpty() ? "请至少上传一个文件" : upload(file);
}
/**
* 上传文件
*
* @param file 文件对象
* @return 结果字符串
*/
private String upload(MultipartFile file) {
// 获取文件名
String filename = file.getOriginalFilename();
// 截取后缀
String suffix = filename.substring(filename.lastIndexOf("."));
// 生成新的文件名
String newFileName = new Random().nextLong() + "" + new Date() + suffix;
// 加载目录
File rootDir = new File(LOCAL_PATH + File.separator + LOCAL_DIR_NAME);
// 如果目录不存在,创建目录
if (!rootDir.exists()) {
rootDir.mkdirs();
}
// 流处理文件
try {
// 这里Spring帮我提供提供了转化,我们不需要自己去写IO流进行传输,当然使用IO流也还是可以实现的
file.transferTo(new File(rootDir, newFileName));
return "上传成功!";
} catch (IOException e) {
e.printStackTrace();
return "上传失败!";
}
}
}
16.4 测试文件上传
编写一个前端小页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>文件:</p>
<form action="/file" method="post" enctype="multipart/form-data">
<input type="file" name="file"><br>
<button>点击上传</button>
</form>
</body>
</html>
上传一个文件,返回上传成功
查看桌面是否上传成功
以上是关于SpringMVC--13 文件上传的主要内容,如果未能解决你的问题,请参考以下文章