フォーマットを読み取った後に画像を保持するInputStream
を再読み込み(リセット)しようとしています。フォーマットを取得した後でInputStreamをリセットまたは再利用する方法
私はそのフォーマットを読んだ後にmysqlデータベースに書き込む必要があります。
フォーマットを一度読んだら、InputStream
にはImageReaders
がありません。または、読み込み操作で閉じられたのでしょうか?
public static String getImageFormat(InputStream inputStream) throws IOException {
ImageInputStream iis = ImageIO.createImageInputStream(inputStream);
Iterator<ImageReader> readers = ImageIO.getImageReaders(iis);
String extension = null;
while (readers.hasNext()) {
ImageReader read = readers.next();
extension = read.getFormatName();
}
extension = extension.toLowerCase();
switch(extension){
case "jpeg":
extension = "jpg";
break;
case "jpg":
extension = "jpg";
break;
case "png":
extension = "png";
break;
case "gif":
extension = "gif";
break;
case "bmp":
extension = "bmp";
break;
default:
}
return extension;
}
getImageFormat
一度でもImageIO.read(inpustream)、と呼ばれている画像を再度読み込むことができません。
それはここでServletFileUploadのFileItem.getInputStream
からInputStream
では、画像フォーマットは、読み込みのコードがあります。
データベースにデータを書き込むために、をgetImageFormat
に渡したらどうすればよいですか?
EDIT
これらのすべては、画像が入っているフォーマット、または他のいくつかのヘッダー内のファイル名に何を伝えるためにContent-Typeヘッダーを設定する必要があり、Javaサーブレット
ブラウザでデフォルトで設定されていますか、それとも自分で設定しますか? – gbenroscience
また、ImageIOが読み込んだ内容を知るにはどうすればいいですか?フォーマット名のみを決定したときは、入力ストリームのデータを読み込んでいませんでした。 – gbenroscience
HTMLを介してファイルをアップロードしている場合は、ブラウザがそれを設定します。あなたのクライアントがブラウザでない場合は、それを設定します。ブラウザがファイルアップロードのために行うことに同意する。番号を再入力して、 'reset()'が例外を投げたかどうか確認してください。そうでなければ、あなたの番号はOKです。 – EJP