0

我有一个在 Tomcat 6 中的 Java 6 上运行的 webapp。 ImageIO.read返回 null。

它尝试从同一 [Windows] 网络上的计算机检索 tiff 图像。为此,我使用 JCIFS 作为 auth,并使用 jai 来读取图像。

在 QA 中,这很有效,我检索并显示 TIF。在生产中,它没有。

我能够访问图像并正确检索文件路径。

这是日志中的错误:

2013-11-18 11:06:47,405 [webapp] INFO  [http-8080-6] 
ScannedService.getScannedDocuments(66) | Customer.java 
get files at Paths[smb://sharedDrived/path/1HK01001.TIF]

2013-11-18 11:06:47,421 [webapp] INFO  [http-8080-6] 
ScannedDocument.<init>(32) | ScannedDocument.java 
constructor, image value: null

null 是由以下内容返回的:

ImageIO.read(smbStream);

为什么该行返回null?

4

1 回答 1

1

ImageIO.read返回的原因null是没有ImageReader插件声称能够读取它(否则,除非输入是null,否则会尝试使用第一个声称可以读取输入的插件进行读取,并且您要么获得图像,要么抛出异常) .

这可能是由两件事引起的。要么没有安装插件(由 ImageIO 发现)。或者输入已损坏,因此无法识别。您似乎已经完成了足够的调试/测试以确定后者不是这里的问题。所以我仍然认为问题在于 jai-imageio 的安装,或者可能是 ImageIO 没有发现 JAI 插件。

您可以尝试(在应用程序启动时,或每次获取null图像时)将 ImageIO 支持的所有格式(使用ImageIO.getReaderFormatNames())打印到调试日志,并查看是否列出了 TIFF。

请注意,如果您将 jai-imageio JAR 作为 Web 应用程序的一部分(在 WEB-INF/lib 中)提供,则重新部署后不会自动发现插件,除非您使用ImageIO.scanForPlugins(). 在这种情况下,我建议您阅读Deploying the plugins in a web app

于 2013-11-19T08:58:47.513 回答