Spring boot 在 Docker环境下的路径映射通用解决方案

场景:

      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

效果展示

Spring boot 在 Docker环境下的路径映射通用解决方案_第1张图片

Spring boot 在 Docker环境下的路径映射通用解决方案_第2张图片

Spring boot 在 Docker环境下的路径映射通用解决方案_第3张图片

Spring boot 在 Docker环境下的路径映射通用解决方案_第4张图片

你可能感兴趣的:(环境调试总结,Spring,boot,Java,Web,docker,spring,boot,docker,路径,docker,文件路径,Docker,路径映射)