2017-02-09 4 views
0

フォーマットを読み取った後に画像を保持する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サーブレット

答えて

1

ブラウザで発生します。自分でイメージを調べる必要はありません。

しかし、あなたは、その周りにBufferedInputStreamをラップする必要がある場合、mark(4096)を呼び出すかImageIO読者はそれから読み込むものは何でも、ImageIOを行い、その後、それがあった場所にそれを戻すためにreset()を呼び出します。 ImageIOがあなたが思った以上に読み込んだ場合は、reset()が例外をスローするため、微調整できます。

+0

ブラウザでデフォルトで設定されていますか、それとも自分で設定しますか? – gbenroscience

+0

また、ImageIOが読み込んだ内容を知るにはどうすればいいですか?フォーマット名のみを決定したときは、入力ストリームのデータを読み込んでいませんでした。 – gbenroscience

+1

HTMLを介してファイルをアップロードしている場合は、ブラウザがそれを設定します。あなたのクライアントがブラウザでない場合は、それを設定します。ブラウザがファイルアップロードのために行うことに同意する。番号を再入力して、 'reset()'が例外を投げたかどうか確認してください。そうでなければ、あなたの番号はOKです。 – EJP

関連する問題