2011-08-19 41 views

答えて

9

blobがコンテンツを格納するファイルの拡張子を取得したいのですか? BLOBにjpegファイルの内容が格納されている場合、"jpg"が必要ですか?

これは不可能です。

ファイルをBLOBに保存し、その拡張子を覚えておく必要がある場合は、通常、拡張子としてVARCHARなどの別の列を保持します。 (私は実際に私が現在作業しているアプリケーションでこれを行い、またMIMEタイプの列も持っています)。

+1

3文字以上を使用します。 '.html'、' .java'、 '.jpeg'は3つ以上の文字を持つ3つの非常に一般的なファイル拡張子です。 –

+0

Jup ..私はそれを書いたときに...その定数を削除したことを認識しました... – aioobe

+0

Dowenvoter、コメントを残したいですか? – aioobe

1

ByteArrayDataSource(http://download.oracle.com/javaee/5/api/javax) /mail/util/ByteArrayDataSource.html)そこにはgetContentType()メソッドがありますが、それは助けてくれるはずですが、個人的に試したことはありません。

2

それは完璧ではないですが、Java Mime Magic libraryは、ファイルの拡張子を推測することができる場合があります

Magic.getMagicMatch(bdata).getExtension(); 
1

別の列を使用する代わりに、Magic Numbersを使用します。

getFileExtn(BLOB) 
{ 
    PNGMagNum[] = {0x89, 0x50, 0x4E, 0x47} 
    if(BLOB[0:3] == PNGMagNum) 
     return ".png" 
    //More checks... 
} 

これは、サポートするすべてのファイルタイプに対して行う必要があります。 16進エディタで自分自身を見つけなければならないかもしれない曖昧なファイルタイプもあります(マジックナンバーは常にコードの最初の数バイトです)。マジックナンバーを使用する利点は、実際のファイルタイプを取得することであり、ユーザーがその名前を決めたばかりのものではありません。

1
if(currentImageType ==null){ 
       ByteArrayInputStream is = new ByteArrayInputStream(image); 
       String mimeType = URLConnection.guessContentTypeFromStream(is); 
       if(mimeType == null){ 
        AutoDetectParser parser = new AutoDetectParser(); 
        Detector detector = parser.getDetector(); 
        Metadata md = new Metadata(); 
        mimeType = detector.detect(is,md).toString(); 

        if (mimeType.contains("pdf")){ 
         mimeType ="pdf"; 
        } 
        else if(mimeType.contains("tif")||mimeType.contains("tiff")){ 
         mimeType = "tif"; 
        } 
       } 
       if(mimeType.contains("png")){ 
        mimeType ="png"; 
       } 
       else if(mimeType.contains("jpg")||mimeType.contains("jpeg")){ 
        mimeType = "jpg"; 
       } 
       else if (mimeType.contains("pdf")){ 
        mimeType ="pdf"; 
       } 
       else if(mimeType.contains("tif")||mimeType.contains("tiff")){ 
        mimeType = "tif"; 
       } 

       currentImageType = ImageType.fromValue(mimeType); 
      } 
関連する問題