Spring Boot 实现文件上传和下载 以及上传后访问文件
一、创建Spring Boot项目
1、https://start.spring.io/
2、如下: (安装STS后可以直接从IDE中创建)
二、增加引入web支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
三、具体代码实现
1、application.properties 文件增加配置如下
# 单个文件的最大值
spring.servlet.multipart.max-file-size=70MB
# 上传文件总的最大值
spring.servlet.multipart.max-request-size=120MB
# 上传文件 存储根目录
userfile.basedir = C:/D/uplad/
2、创建 UploadController 实现文件上传
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
/**
* description: 文件上传Controller
* @version v1.0
* @author w
* @date 2021年3月16日上午11:19:34
**/
@RestController
public class UploadController {
/**
* 上传文件目录
*/
@Value(value = "${userfile.basedir}")
private String userfileDir ;
/**
* description: 上传单个文件
* @param file
* @return Map<String,Object>
* @version v1.0
* @author w
* @date 2021年3月16日 上午11:48:38
*/
@RequestMapping(value = "/upload")
public Map<String , Object> upload(MultipartFile file){
Map<String, Object> map = new HashMap<String, Object>();
if(null == file) {
map.put("500", "上传文件不能为空!");
return map;
}
String originalFilename = file.getOriginalFilename();
File dest = new File(userfileDir);
if(!dest.exists() && !dest.isDirectory()) {
dest.mkdirs();
}
try {
file.transferTo(new File(dest , originalFilename));
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
map.put("500", "上传失败!");
map.put("错误信息如下", e);
return map ;
}
map.put("200", "上传成功");
map.put("fileName", originalFilename);
return map ;
}
/**
* description: 上传多个文件
* @param files
* @return Map<String,Object>
* @version v1.0
* @author w
* @date 2021年3月16日 上午11:49:03
*/
@RequestMapping(value = "/uploads")
public Map<String , Object> uploads(MultipartFile files[]){
Map<String, Object> map = new HashMap<String, Object>();
if(null == files || files.length == 0) {
map.put("500", "上传文件不能为空!");
return map;
}
List<String> list = new ArrayList<String>();
for (MultipartFile file : files) {
String originalFilename = file.getOriginalFilename();
File dest = new File(userfileDir);
if(!dest.exists() && !dest.isDirectory()) {
dest.mkdirs();
}
try {
file.transferTo(new File(dest , originalFilename));
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
map.put("500", "上传失败!");
map.put("错误信息如下", e);
return map ;
}
list.add(originalFilename);
}
map.put("200", "上传成功");
map.put("fileName", list);
return map ;
}
}
四、实现上传后的文件访问
1、创建 FileAccessConfig 类,增加静态路径配置,实现上传后的文件访问
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* description: 配置上传后的文件访问路径
* @version v1.0
* @author w
* @date 2021年3月16日下午2:41:37
**/
@Configuration
public class FileAccessConfig implements WebMvcConfigurer {
/**
* 上传文件目录
*/
@Value(value = "${userfile.basedir}")
private String userfileDir ;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// “file:” 为固定内容,经测试发现,不可更改
registry.addResourceHandler("/userfiles/**").addResourceLocations("file:".concat(userfileDir));
}
}
五、测试
1、测试步骤略,推荐使用 Postman 测试。
3、简要步骤如下:
六、总结
1、https://start.spring.io/ 创建Spring Boot项目
2、引入web支持pom
3、具体上传代码实现 和 SpringMVC 上传一样
4、静态路径配置,实现上传后的文件访问
5、文件下载,略, 可以点击这里。
【支持视频文件上传,且支持截取预览图片,略】
参考资料: 上传后文件访问