场景:
Java 程序一般运行在Docker容器下,但是很多开发环境是在Windows下开发的(也有在Windows 下安装Docker ,早前我就是为了怕Ubuntu非桌面麻烦就干脆使用Win10 上安装一个Docker );这就会出现运行时的路径问题,否则会出错。
以下是一个文本编辑器的上传功能示例。
配置类
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//registry.addResourceHandler("/img/**").addResourceLocations("file:"+ GlobalParams.OTHER_FILE_UPLOAD_PATH);
registry.addResourceHandler("/img/**").addResourceLocations("file:/users/images/");
}
}
上传实现
@RestController
@Api(tags = "富文本上传接口")
@RequestMapping("/wangEditor")
public class WangEditorController {
/**
* wangEditor 富文本上传专用
*/
@PostMapping("uploadFile")
@ApiOperation("wangEditor 富文本上传专用接口")
HttpUploadResult editorUploadFile(@RequestParam MultipartFile file){
HttpUploadResult httpUploadResult=new HttpUploadResult();
if (file.isEmpty()) {
httpUploadResult.setErrno(1);
httpUploadResult.setMessage("文件为空");
return httpUploadResult;
}
String fileName = file.getOriginalFilename(); // 文件名
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 后缀名
String filePath = "/users/images/"; // 上传后的路径
fileName = UUID.randomUUID() + suffixName; // 新文件名
//-----------------------------
File dest = new File(filePath + fileName);
//File dest = new File(GlobalParams.OTHER_FILE_UPLOAD_PATH + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
String filename = "/img/" + fileName;
httpUploadResult.setErrno(0);
httpUploadResult.setData(new DataInfo(){{setUrl(filename);setAlt("");setHref("");}});
} catch (IOException e) {
httpUploadResult.setErrno(1);
httpUploadResult.setMessage("上传文件至服务器失败:"+e.getMessage());
}
return httpUploadResult;
}
}
Windows Docker 运行
cmd -> 使用命令把D盘的image文件目标 = /users/images/ 目录
docker run -d --name mes -p 9019:9019 -v D:\images:/users/images/ mes:latest
Ubuntu
docker run -d --name mes -p 9019:9019 -v /users/images/:/users/images/ mes:latest
效果展示