我有一个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;
}
我尝试../获取上面的一个目录,但没有成功
1条答案
按热度按时间webghufk1#
该
getResourceAsStream
方法只能用于阅读资源(files),这是一个相当合乎逻辑的事情。就我所知,您希望直接从文件系统读取图像,而不是像ENTRYPOINT
那样从类路径读取图像。为此,您可以使用FileInputStream
。因此,您必须将in
变量替换为以下代码:但是不要忘记关闭输入流,可以使用try-with-resources statement来实现这个目的,然后,相关代码将如下所示: