Java apache公共FTP,如何将图像文件下载到BufferedImage

所以我试图从FTP站点下载图像文件,从中获取一些元数据,然后使用Play将二进制数据返回到网页!框架。这是我在控制器操作中使用的基本代码(为简洁起见,删除了所有错误检查):
FTPClient ftp = new FTPClient();
ftp.connect(site.host, site.port);
ftp.login(site.username, site.password);
InputStream is = ftp.retrieveFileStream("somefile.png");
Response.current().contentType = "image/png";
renderBinary(is);
我知道输入流的真实类型是SocketInputStream,我需要做些什么才能使用它? 我也试过这个:
BufferedImage bimg = ImageIO.read(is);
但'bimg'显示为null,因此这让我相信输入流中的数据不是有效的图像数据。 有没有人有这方面的经验,可以指出我正确的方向?     
已邀请:
您可能需要以某种方式将
SocketInputStream
转换为
ImageInputStream
。这是
ImageIO.read()
上的javadoc,它解释了为什么你得到一个null: -   返回一个BufferedImage作为结果   解码提供的InputStream   选择了ImageReader   从这些中自动进行   目前已注册。 InputStream   包装在ImageInputStream中。如果   没有注册的ImageReader声称是   能够读取结果流,   返回null。      来自的当前缓存设置   getUseCache和getCacheDirectory会   用来控制缓存   创建的ImageInputStream。      此方法不会尝试定位   ImageReaders,可以直接读取   来自InputStream;那可能   使用IIORegistry和   的ImageReaderSpi。      这种方法不会关闭   读取后提供InputStream   操作已经完成;它是   呼叫者的责任关闭   如果需要,流。 因此,我假设
ImageReader
无法读取您拥有的流,因此您从调用中获得null。 UPDATE 你可能会这样做: -
BufferedImage bimg = ImageIO.read(ImageIO.createImageInputStream(yourSocketInputStream));
这对你有用吗?     

要回复问题请先登录注册