2014年11月15日

48. システムに入力された画像ファイルの管理について(2)

システムに入力された画像ファイルをDBで管理する場合は、画像ファイルをBase64形式に変換し、Text型に登録すること。

例)
( Apache Commons Lang を利用する場合)

String base64 = Base64Util.encode( new byte[] { .. } );

以前、OID型(BLOB型)に登録していたことがあるが、諸々の理由により扱いづらかったため、データサイズが30%増しになるデメリットを享受してでも、上記の方針を取ること。
・登録/更新/削除時に lo_create、lo_unlink など特殊な関数を利用しなければならない。
・登録/更新時に( String や byte[] ではなく) Stream を処理しなければならない。
・更新時に一旦、アンリンク( lo_unlink )しなければならない。
 そのまま Stream を上書きすると、更新前よりも更新後のほうがファイルサイズが小さい場合に、更新前のファイルの一部(後方)が残存する(=不正なファイルになる)ため。
・削除時に一旦、アンリンク( lo_unlink )しなければならない。
 そのまま削除すると、アンリンクされなかったファイルがDBに残存するため。
・検索時に(高速に)ファイルの有無を判断しづらい。
・参照時にプログラムを作成しなければならない(以前は lo_export 関数の存在を知らなかった)。
(・定期的なDBバックアップ時のdumpファイルには、ファイルがちゃんと含まれていた。)

この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック