如何在java spring Boot 中从挂载的卷中获取图片

2w2cym1i  于 2022-12-13  发布在  Spring
关注(0)|答案(1)|浏览(127)

我有一个java应用程序在一个docker容器和保存图片是工作正常,但得到他们不工作,我得到错误:javax.imageio.IIOException:无法读取输入文件!
这是我的道克形象,

FROM openjdk:17-jdk-alpine
ARG JAR_FILE=*.jar
EXPOSE 9000
COPY  build/libs/wall-0.0.1-SNAPSHOT.jar .
ENTRYPOINT ["java","-jar","wall-0.0.1-SNAPSHOT.jar"]

安装部分在kubernetes集群配置中完成:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wall-app
  labels:
    app: wall-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wall-app
  template:
    metadata:
      labels:
        app: wall-app
    spec:
      containers:
      - name: wall-app
        image: u/wall
        imagePullPolicy: Always
        ports:
        - containerPort: 9010
        resources:
          limits:
            memory: 512Mi
        volumeMounts:
        - name: images-volume
          mountPath: /images
      volumes:
      - name: images-volume
        hostPath:
          path: /home/ubuntu/images-volume

我的java应用程序函数获取图像:否:我确定图片名称正确,问题出在输入流上

@PostMapping(value = "/post/image")
    public @ResponseBody String getImageAsBase64(@RequestBody String json){

        try {
            JSONObject jsonObject = new JSONObject(json);
            String path = "/images/post/" + jsonObject.get("postId) + "/" +      jsonObject.get("pictureName");

            InputStream in = getClass()
                    .getResourceAsStream(path);

            String encodedString = Base64.getEncoder().encodeToString(IOUtils.toByteArray(in));

           System.out.print(path);
           //images/post/5/test.png

            return encodedString;
        }catch(Exception e) {
            System.out.println("picture not found"+e);
        }

        return null;
    }

我尝试../获取上面的一个目录,但没有成功

webghufk

webghufk1#

getResourceAsStream方法只能用于阅读资源(files),这是一个相当合乎逻辑的事情。就我所知,您希望直接从文件系统读取图像,而不是像ENTRYPOINT那样从类路径读取图像。为此,您可以使用FileInputStream。因此,您必须将in变量替换为以下代码:

InputStream in = new FileInputStream(path);

但是不要忘记关闭输入流,可以使用try-with-resources statement来实现这个目的,然后,相关代码将如下所示:

try (InputStream in = new FileInputStream(path)) {

    String encodedString = Base64.getEncoder().encodeToString(IOUtils.toByteArray(in));

    System.out.print(path);
    //images/post/5/test.png

    return encodedString;
}

相关问题