修改.properties文件
配置文件添加如下内容
# 静态资源对外暴露的访问路径
file.staticAccessPath = /upload-images/**
# 文件上传目录,这里需要注意文件夹后面必须得带上斜杠,否则会出现404的问题
file.uploadFolder=D:/Data/upload-images/
# linux下的文件路径配置
# file.uploadFolder=/root/upload-images/
添加两个.java配置文件
UploadFileConfig.java
@Configuration
public class UploadFileConfig {
@Value("${file.uploadFolder}")
private String uploadFolder;
@Bean
MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
factory.setLocation(uploadFolder);
// 单次请求最大上传文件大小
factory.setMaxRequestSize("10MB");
return factory.createMultipartConfig();
}
}
UploadFilePathConfig.java
这里需要注意,extends WebMvcConfigurerAdapter这种写法已经被废弃,可以实现WebMvcConfigurer接口代替
@Configuration
public class UploadFilePathConfig implements WebMvcConfigurer {
@Value("${file.staticAccessPath}")
private String staticAccessPath;
@Value("${file.uploadFolder}")
private String uploadFolder;
/**
* 配置直静态资源访问路径映射,将访问请求的路径映射到资源文件实际所处的文件路径
* 这里需要注意windows下与linux下的资源路径写法不同,必须得区分开来
* @param registry
*/
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String os = System.getProperty("os.name");
if(os.toLowerCase().startsWith("win"))
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:/" + uploadFolder);
else
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder);
}
}
注意windows与linux环境的文件路径配置方式不同,这里很容易踩坑
windows下:
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:/D:/Data/upload-images/");
}
Linux下:
linux用‘/’表示根路径,配置时千万不能写成file://data/upload-images,多一个杠就报错了
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(staticAccessPath).addResourceLocations("file:/data/upload-images/");
}
最后
重启项目后,就可以通过localhost:8080/upload-images/xxx.jpg,直接访问D:/Data/upload-images/xxx.jpg这个文件了,如果出现了404的问题,一般是路径写法不正确
网友评论