我看到 ImageIO.read() 方法的奇怪行为。
我将 InputStream 传递给此方法,当我第二次尝试读取它时,它读取失败并返回 null。
我正在尝试将图像上传到 Amazon S3,并且我想创建图像的 3 个版本。原始和 2 个缩略图。我的问题是,当我想创建 2 个缩略图时,我需要使用 ImageIO.read() 读取 InputStream。如果我为同一个 InputStream 运行此方法 2,我会在第二次读取时得到 null。
我可以通过只读取一个并将相同的 BufferedImage 传递给缩放方法来规避这个问题。但是,我仍然需要将我的方法传递给其他 AmazonS3 服务的 InputStream 来上传原始文件。
所以我的问题是,有没有人知道 ImageIO 第一次读取输入流后会发生什么?
下面的代码示例
public String uploadImage(InputStream stream, String filePath, String fileName, String fileExtension) {
try {
String originalKey = filePath + fileName + "." + fileExtension;
String smallThumbKey = filePath + fileName + ImageConst.Path.SMALL_THUMB + "." + fileExtension;
String largetThumbKey = filePath + fileName + ImageConst.Path.LARGE_THUMB + "." + fileExtension;
BufferedImage image = ImageIO.read(stream);
InputStream smallThumb = createSmallThumb(image, fileExtension);
InputStream largeThumb = createLargeThumb(image, fileExtension);
uploadFileToS3(originalKey, stream);
uploadFileToS3(smallThumbKey, smallThumb);
uploadFileToS3(largetThumbKey, largeThumb);
return originalKey;
} catch (IOException ex) {
Logger.getLogger(ManageUser.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}