byte[]
(Blob)からファイルタイプの拡張子を取得する方法。私はbyte[]
にDBからファイルを読んでいるが、私は自動的にファイル拡張子を検出する方法を知らない。byte [](Blob)からファイルタイプ拡張子を取得する方法
Blob blob = rs.getBlob(1);
byte[] bdata = blob.getBytes(1, (int) blob.length());
byte[]
(Blob)からファイルタイプの拡張子を取得する方法。私はbyte[]
にDBからファイルを読んでいるが、私は自動的にファイル拡張子を検出する方法を知らない。byte [](Blob)からファイルタイプ拡張子を取得する方法
Blob blob = rs.getBlob(1);
byte[] bdata = blob.getBytes(1, (int) blob.length());
blobがコンテンツを格納するファイルの拡張子を取得したいのですか? BLOBにjpegファイルの内容が格納されている場合、"jpg"
が必要ですか?
これは不可能です。
ファイルをBLOBに保存し、その拡張子を覚えておく必要がある場合は、通常、拡張子としてVARCHAR
などの別の列を保持します。 (私は実際に私が現在作業しているアプリケーションでこれを行い、またMIMEタイプの列も持っています)。
ByteArrayDataSource(http://download.oracle.com/javaee/5/api/javax) /mail/util/ByteArrayDataSource.html)そこにはgetContentType()メソッドがありますが、それは助けてくれるはずですが、個人的に試したことはありません。
それは完璧ではないですが、Java Mime Magic libraryは、ファイルの拡張子を推測することができる場合があります
Magic.getMagicMatch(bdata).getExtension();
JDK
のURLConnection
クラスのまともな方法がありますが、以下の回答を参照してください。 Getting A File's Mime Type In Java
別の列を使用する代わりに、Magic Numbersを使用します。
getFileExtn(BLOB)
{
PNGMagNum[] = {0x89, 0x50, 0x4E, 0x47}
if(BLOB[0:3] == PNGMagNum)
return ".png"
//More checks...
}
これは、サポートするすべてのファイルタイプに対して行う必要があります。 16進エディタで自分自身を見つけなければならないかもしれない曖昧なファイルタイプもあります(マジックナンバーは常にコードの最初の数バイトです)。マジックナンバーを使用する利点は、実際のファイルタイプを取得することであり、ユーザーがその名前を決めたばかりのものではありません。
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);
}
3文字以上を使用します。 '.html'、' .java'、 '.jpeg'は3つ以上の文字を持つ3つの非常に一般的なファイル拡張子です。 –
Jup ..私はそれを書いたときに...その定数を削除したことを認識しました... – aioobe
Dowenvoter、コメントを残したいですか? – aioobe