2012-01-17 4 views
1

DBからLONGBLOBフィールドのバイナリを取得する必要があります。このフィールドには、txt、doc、xdoc、pdfなどのあらゆる種類のファイル形式が格納されています。これらのファイルをダウンロードできるように、実際にはバイナリ形式を実際のファイル形式に変換できる必要があります。データベースのBLOBフィールドのバイナリ内容をmySQLファイルに変換します

どのようにすればいいですか?

答えて

2

他の人が言っているように、フォーマットを保存する別のフィールドを持つのが最善でしょう。拡張子(ファイル名の最後の "。"の後のすべて)をコピーすることで、これを行うことができます。最も良い方法は、おそらくファイルのMIMEタイプを取得することです:see this for example

これで、データベースのフィールドにMIMEタイプを格納できます。これはほとんどの場合動作しますが、ファイルの拡張子は誤解を招く(あいまいな)ことがあります。

1

LONGBLOBに格納されているファイルのファイル形式を示すフィールドfile_formatを追加すると、関連するファイル形式に従ってバイナリを変換できます。

またはファイルフォーマットの最初の数バイトを確保してから、それが実際のファイルの内容であることを確認してください。

1

私はドキュメントタイプを保存し、どのタイプを変換すべきかを伝えるための別のフィールドが必要だと思います。 I/O InputStreamを使用してファイルを読み書きします。

クライアントファイルをどこかにアップロードし、これらのファイルへのリンクをdbに保存することをお勧めします。それは速くなければならない。

0

他にも示唆しています。ファイルの種類がBOLB(BLOB_COL_NAME)フィールドに格納されていることを教えてくれます、データベース内の別の列(FILETYPE_COL_NAME)を作成し、その後、あなたはtry/catchブロックに以下のコードを拡張

String fileType = rs.getString("FILETYPE_COL_NAME"); 

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("filepath."+fileType))); 

ResultSet rs = statement.executeQuery("Select * from tablename"); 

BufferedInputStream bis = new BufferedInputStream(rs.getBinaryStream("BLOB_COL_NAME")); 

byte[] buffer = new byte[1024]; 

int byteread = 0; 

while((byteread = bis.read(buffer)) != -1){ 
     dos.write(buffer, 0, byteread); 
} 

dos.flush(); 
dos.close(); 
bis.close(); 
関連する問題