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

效果展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值