簡體   English   中英

java spring boot中如何從掛載卷中獲取圖片

[英]How to get pictures from mounted volume in java spring boot

我在 docker 容器中有一個 java 應用程序,保存圖片工作正常但獲取它們不起作用我得到錯誤:javax.imageio.IIOException:無法讀取輸入文件..

這是我的 doker 圖像,

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"]

安裝部分在 kube.netes 集群配置中完成:

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 應用程序 function 獲取圖像: 不:我確定圖片名稱是正確的 problem 與輸入 stream

    @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;
    }

容器內的這個文件是你可以看到安裝的卷“圖像”

我試過../ 得到上面的一個目錄,但它沒有用

getResourceAsStream方法僅用於從類路徑中讀取資源(文件),這是一個相當合乎邏輯的事情。 據我所知,您想直接從文件系統讀取圖像,在您的類路徑之外,這可以從您的ENTRYPOINT觀察到。 為此,您可以使用FileInputStream 因此,您必須用以下代碼替換in變量:

InputStream in = new FileInputStream(path);

但不要忘記關閉輸入 stream。為此,您可以使用方便的try-with-resources 語句 之后,您的相關代碼將如下所示:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM