ImageIO.read()メソッドで奇妙な動作が見られます。
InputStreamをこのメソッドに渡しますが、2回目に読み取ろうとすると、読み取りに失敗してnullを返します。
Amazon S3に画像をアップロードしようとしていますが、画像の3つのバージョンを作成したいと思います。オリジナルと2つのサムネイル。私の問題は、2つのサムネイルを作成するときに、ImageIO.read()を使用してInputStreamを読み取る必要があることです。同じInputStreamに対してこのメソッド2を実行すると、2回目の読み取りでnullが発生します。
この問題を回避するには、1つだけを読み取り、同じ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;
}