真的破防了 2023-12-13 14:30 采纳率: 62.5%
浏览 4
已结题

Java代码部署到Linux的docker,无法存储文件到Linux里

Java代码部署到Linux的docker,无法存储文件到Linux里。

使用SpringBoot做了一个博客,然后用户头像还有图片都是存储到OSS里的,但是因为OSS过期了。我想着就是存储几个图片,然后写点笔记用。

我就想把图片存储到Linux里的nginx,因为图片放到里面可以直接访问,我觉得只要图片存储到里面,也是可以正常访问的。但是问题出在图片无法存储到linux里面。

这是我写的后端存储代码

@RestController
public class UploadController {
    @Autowired
    private LocalUploadService localUploadService;

    @PostMapping("/upload")
    public ResponseResult uploadImg(MultipartFile img) {
        if (img == null) {
            throw new SystemException(AppHttpCodeEnum.SYSTEM_ERROR);
        }
// 图片名称处理
        String originalFilename = img.getOriginalFilename();
        if (!originalFilename.endsWith(".png") && !originalFilename.endsWith("jpg") && !originalFilename.endsWith("jpeg")) {
            throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
        }
        String ext = "." + originalFilename.split("\\.")[1];
        String uuid = UUID.randomUUID().toString().replace("-", "");
        String fileName = uuid + ext;
        String filePath = PathUtils.generateFilePath(originalFilename);

        ApplicationHome applicationHome = new ApplicationHome(this.getClass());

        // 可以正常访问的图片路径示例: http://47.120.13.189:8093/static/images/41b027bf9ce24cf88c2628d10d4fabd8.png
          // 端口
        String host = "http://47.120.13.189:8093";
          // 访问中缀
        String infix = "/static/images/";
        // 访问路径
        String accessPath = host + infix + fileName;
        // 存储路径
        String storagePath = "/app/nginx/html/blog_dist/static/images";
        try {
            img.transferTo(new File(storagePath));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ResponseResult.okResult(accessPath);
    }
}

这个是linux的需要存储到的路径,但是存不进去。

img

我有一个admin后台添加预览图的代码,照着这样写,docker直接启动不了了

希望可以教一下怎么存储图片到linux指定路径

  • 写回答

1条回答 默认 最新

  • Bianca1 2023-12-13 16:33
    关注

    1.你用 docker 部署,那么你文件存储应该会保存到docker的容器中,而不是linux系统。
    你可以把目录挂载出来,运行的时候加个参数:docker run -v /app/nginx/html/blog_dist/static/images:/app/nginx/html/blog_dist/static/images
    这样你容器中保存的文件也会保存到你 linux 系统上。
    2.你保存文件时,应该判断一下目录是否存在,否则不存在会报错(docker容器中肯定不存在这个目录)。

    File storageDir = new File(storagePath);
    if (!storageDir.exists()) {
        boolean created = storageDir.mkdirs();
        if (!created) {
            throw new SystemException("Failed to create storage directory.");
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月13日

悬赏问题

  • ¥15 Pyqt 如何正确的关掉Qthread,并且释放其中的锁?
  • ¥30 网站服务器通过node.js部署了一个项目!前端访问失败
  • ¥15 WPS访问权限不足怎么解决
  • ¥15 java幂等控制问题
  • ¥15 海湾GST-DJ-N500
  • ¥15 氧化掩蔽层与注入条件关系
  • ¥15 Django DRF 如何反序列化得到Python对象类型数据
  • ¥15 多数据源与Hystrix的冲突
  • ¥15 如何在线硕士了解,广告太多,希望有真实接触过的人回答下?(标签-学习|关键词-在线硕士)
  • ¥15 zabbix6.4与frp如何进行联动