网上看到的有用 WebMvcConfigurer 和 WebMvcConfigurerAdapter,试了试,都不行。
最后通过 WebMvcConfigurationSupport 解决的
1、application.yml 里增加
file:
staticAccessPath: /upload/file
# uploadFolder: e:\\upload\\
uploadFolder: /home/upload/files/
#文件上传目录(注意Linux和Windows上的目录结构不同)
#staticAccessPath 上传文件返回的地址
#uploadFolder 文件真实存放地址
#访问文件时 WebAppConfigure 会将返回的地址映射到真实地址
2、文件上传
@Value("${file.uploadFolder}")
private String uploadFolder;
@Value("${file.staticAccessPath}")
private String staticAccessPath;
public String uploadfile(@RequestParam("file")MultipartFile file, HttpServletRequest request) {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMdd/HHMMSS");
String pathDir = uploadFolder + File.separator
+ dateformat.format(new Date()) + (int) Math.random() * 1000
+ File.separator;
if (File.separator.equals("\\")) {
pathDir = pathDir.replace("/", "\\");
}
String filename = file.getOriginalFilename();
String extName = "";
if (null!=filename && filename.length()>0) {
int t = filename.lastIndexOf(".");
if (t > 0) {
extName = filename.substring(t).toLowerCase();
}
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmssSSS");
filename = sdf.format(new Date());
pathDir += filename + extName;
logger.error("----------文件上传路径------------"+pathDir);
try {
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(pathDir));
} catch (IOException e) {
e.printStackTrace();
}
String encodeddata = request.getScheme() + "://域名或者ip"+ request.getContextPath() ;
return encodeddata+pathDir.replace(uploadFolder,staticAccessPath).replace("\\", "/");
}
3、访问时替换路径
public class WebAppConfigure extends WebMvcConfigurationSupport {
@Value("${file.uploadFolder}")
private String uploadFolder;
@Value("${file.staticAccessPath}")
private String staticAccessPath;
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
if(System.getProperty("os.name").toLowerCase().contains("linux")){
registry.addResourceHandler(staticAccessPath+"/**").addResourceLocations("file:"+uploadFolder);
}else if(System.getProperty("os.name").toLowerCase().contains("windows")){
registry.addResourceHandler(staticAccessPath+"/**").addResourceLocations("file:"+uploadFolder);
}
}
}