导入依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
yml:
#文件上传
file:
#静态资源对外暴露的访问路径
staticAccessPath: /api/file/**
#静态资源实际存储路径
uploadFolder: D:/static/teamImages/
server:
# 端口号(任意)
port: 8000
spring:
servlet:
multipart:
max-request-size: 100MB
max-file-size: 10MB
新建配置类:
@Configuration
public class UploadConfig implements WebMvcConfigurer {
@Value("${file.staticAccessPath}") //服务器访问路径
private String staticAccessPath;
@Value("${file.uploadFolder}") //获取到文件上传的路径(D盘...或其他文件路径)
private String uploadFolder;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder);
}
}
新建controller
@RestController
@CrossOrigin
public class UploadController {
@Value("${file.uploadFolder}")
private String uploadFolder;
@RequestMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws UnknownHostException {
//使用UUID生成唯一标识
String randomNumber = UUID.randomUUID().toString().replace("-", "");
//创建一个唯一标识作为评论的主键以及队伍的一个字段,方便用来保存数据将队伍与队伍描述建立起关系
//获取文件的原始名
String oldFilename = file.getOriginalFilename();
//使用FilenameUtils获得文件的后缀(先导依赖Commons-fileUpload)
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
//生成新的文件名(队伍名+随机数+后缀名)
String newFileName = randomNumber + "." + extension;
//使用ResourceUtils类路径再获取文件保存的路径
File dateDir = new File(uploadFolder);
if (!dateDir.exists()) {
//判断目录是否存在,不存在则直接创建
dateDir.mkdirs();
}
try {
//将文件存储到本地
file.transferTo(new File(uploadFolder, newFileName));
} catch (IOException e) {
e.printStackTrace();
return "上传失败";
}
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
StringBuffer url = request.getRequestURL();
String urlPrefix = url.substring(0, url.length() - request.getRequestURI().length());
//上传完毕,存入数据库中的地址为:
String invented_address= urlPrefix + "/api/file/" + newFileName;
return "上传成功,虚拟路径为:"+invented_address;
}
}
此时再通过接口返回的url就可以访问上传到本地磁盘上的文件了。