提问人:Serdg D. 提问时间:10/31/2023 更新时间:10/31/2023 访问量:16
com.lowagie.text.ExceptionConverter:无法创建缓存文件(在只读 docker 容器中)
com.lowagie.text.ExceptionConverter: Can't create cache file (in the read-only docker container)
问:
在只读 docker 容器中运行时,以下行
Image.getInstance(logoUrl);
引发异常
2023-10-19 13:55:28.507 ERROR 1 --- [qtp795321555-23] c.r.c.b.a.error.GeneralExceptionMapper : Request failed with exception: Can't create cache file! class com.lowagie.text.ExceptionConverter
com.lowagie.text.ExceptionConverter: Can't create cache file!
问题是:仅对 png 文件抛出异常,并且 jpg 文件正常工作。
你有什么想法,如何解决这个问题吗?
答:
0赞
Serdg D.
10/31/2023
#1
知道了。 问题是,Image.getInstance() 有不同的分支来解析不同的文件内容,例如:
if (c1 == 71 && c2 == 73 && c3 == 70) {
var14 = ImageLoader.getGifImage(imgb);
return var14;
}
if (c1 == 255 && c2 == 216) {
var14 = ImageLoader.getJpegImage(imgb);
return var14;
}
if (c1 == 0 && c2 == 0 && c3 == 0 && c4 == 12) {
var14 = ImageLoader.getJpeg2000Image(imgb);
return var14;
}
if (c1 == 255 && c2 == 79 && c3 == 255 && c4 == 81) {
var14 = ImageLoader.getJpeg2000Image(imgb);
return var14;
}
if (c1 == PNGID[0] && c2 == PNGID[1] && c3 == PNGID[2] && c4 == PNGID[3]) {
var14 = ImageLoader.getPngImage(imgb);
return var14;
}
因此,如果JPEG文件的处理工作正常,我们需要将输入格式转换为JPEG: InputStream 是 = logoUrl.openStream(); 图像IO.setUseCache(false);
var bufferedImage = ImageIO.read(is);
var convertedImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
convertedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
var canWrite = ImageIO.write(convertedImage, "jpg", outputStream);
if (canWrite) {
logoImage = Image.getInstance(outputStream.toByteArray());
}
一方面,这种解决方案有一个消极的一面,即将每个文件转换为jpg,但另一方面,一切正常,并且(如果需要)可以重构解决方案以仅将转换应用于png文件。
评论