ファイル型の詳細

最終更新日: 2021年4月21日
R8 | R9

内部の構造

Wagby でファイル型の項目を定義するとテーブルには二つのカラムが用意されます。

  • 一つ目のカラムには、オリジナルのファイル名を保存する。
  • もう一つのカラムには、upload_dir フォルダ内の物理的なファイル名を記録する。

ファイル本体はデータベースに格納されません。upload_dirというフォルダ内にモデルIDのフォルダが用意され、その中に一時ファイル名が付与されて保存されます。

図1 upload_dirフォルダ

ファイル型項目を作成すると、対応する(データベースの)テーブルには二つの項目が用意されます。例を示します。

モデル product にファイル型項目 photo を用意したとします。このとき、テーブル product が作成されますが、項目は次のように二つ用意されます。

項目名 説明
photo ファイル名が格納されます。 duke3D.jpg
photo_jshfilename ファイルの存在するパスを示します。起点は wagbyapp/bin となっています。 ../../upload_dir/product/__multi1869501174086226700.tmp
この例では upload_dir に保存される実際のファイルは一時ファイル名(拡張子tmp)となっています。これをアップロードしたファイル名自身を使うようにすることもできます。次の節で説明します。

オリジナルファイル名をそのまま使う

「オリジナルファイル名をそのまま使う」設定時の upload_dir フォルダを図33に示します。アップロード時のファイル名で格納されています。

図2 オリジナルファイル名をそのまま使う設定にした場合のupload_dirフォルダの内容

「オリジナルファイル名をそのまま使う」設定の注意点

運用途中でファイル名の扱いを「オリジナルファイル名を残す」方式に変更する場合

運用後に「ファイル名にオリジナルファイル名をそのまま使う」ように設定を変更して再ビルドし、アプリケーションを入れ替えた場合は次のようになります。

  • その前まで登録されたファイルは拡張子が .tmp のファイル名のまま。
  • アプリケーション入れ替え後に登録したファイルはオリジナルファイル名として保存される。

過去に登録された .tmp ファイル名を、オリジナルファイル名に戻すためのツールを提供しています。 詳細は"ファイル名の扱いをオリジナルファイル名を残す方式に変更する"をお読みください。

ファイルの実体の扱い

ファイルの削除処理を行なった場合、データベースからファイル名の情報は削除されますが、ファイルの実体は残っています。

ファイルの実体を upload_dir フォルダに残す理由は次のとおりです。

  • コピー登録機能を用いた場合、コピー元のデータを削除したときにコピーされたデータからファイルの実体が存在しなくなった、ということを防ぐ必要がある。
  • ファイル型項目の参照連動・自モデル保存の場合、連動元と連動先でファイルの二重管理を行う必要がある。連動元をコピーしても連動先から参照するファイルの実体は残っている必要がある。

物理的なファイルを定期的に削除する

残っているファイル(の実体)を定期的に削除するジョブが用意されています。 "サポート > 管理者ガイド(R8) > 参照されていないファイルの削除ジョブ"をお読みください。

物理的なファイルを同時に削除する

データ削除のタイミングでファイルの実体を削除する方法も用意されています。この方法は上述した「ファイルの実体を upload_dir フォルダに残す理由」に該当しない場合にのみ行なってください。

カスタマイズフォルダ customize/resources に myapplication.properties ファイルを用意し、次の行を加えます。

R8.4以降

server.servlet.context-parameters.file_delete_mode=UnsavedFile

R8.3.xまで

server.context-parameters.file_delete_mode=UnsavedFile

上記設定を追加後、ビルドを行なってください。この設定はアプリケーション全体に適用されます。

運用途中に直接 application.properteis ファイルを変更することもできます。変更(し、再起動した)後の操作で、ファイルの削除処理が機能します。ただし、変更前のファイルは upload_dir フォルダに残ったままとなります。過去データについては、テーブルに格納されているファイル型項目を直接、SQL で検索し、参照されていないファイルを手動で削除してください。

制約

一覧更新、アップロード更新、一括更新、メール受信、メール送信でのファイル削除には未対応です。また、カスタマイズコードで Dao/Service を使った場合も未対応です。

保存先フォルダの変更

自動生成された WEB-INF\classes\savedir.properties.UTF8 ファイルをテキストエディタで開きます。 次のように記載されています。

# ライセンスファイル
savedir.jfclicenseholder=../../upload_dir/jfclicenseholder
# メールテンプレート
savedir.jfcmailtemplate=../../upload_dir/jfcmailtemplate
# 帳票テンプレート
savedir.jfcreporttemplate=../../upload_dir/jfcreporttemplate
# 顧客
savedir.customer=../../upload_dir/customer

標準では、起点ディレクトリ (wagbyapp\bin) からの相対パスとなっています。保存先はモデル毎に指定できるようになっています。

ここで、変更したいモデルのみエントリを残して編集します。変更が不要なモデルは、もともとのファイルから記述を削除します。 例えば「顧客」モデルのみ保存先を変更したい場合は、次のようになります。

# 顧客
savedir.customer=C://Users//YOURNAME//Desktop//newfolder

編集したファイルを customize\resources フォルダに、mysavedir.properties.UTF8 というファイル名で保存します。

カスタマイズファイル名の注意点

カスタマイズした場合は mysavedir.properties として保存してください。接頭語 my の詳細はこちらをお読みください。

savedir.properties ファイルを直接書き換えてカスタマイズフォルダに含めてしまうと、新規モデルを追加したときに、そのモデルのリソース(savedir.XXXXX)が含まれないこととなり、実行時にエラーとなります。

運用開始後に変更した場合

運用途中に mysavedir.properties.UTF8 ファイルを作成した場合、次のルールとなります。

  • 変更前に登録したファイルは、変更前に指定されていたフォルダを参照します。
  • 変更後に登録したファイルは、新しく指定されたフォルダを参照します。

注意

このため、変更前に指定されていたフォルダは消さないようにご注意ください。

その他の情報

"サポート > Wagby Developer Network(R8) > Javaを用いたカスタマイズ > リソースファイル"をお読みください。

MIMEタイプ8.3.1

ファイル項目のダウンロードに設定されるMIMEタイプはWEB-INF/mime.typesに設定されています。このルールは次の通りです。

  • pdf,rtf,tsv,text/plain,Microsoft Officeファイル,画像ファイルはブラウザで表示することを許容する。
  • それ以外のファイル(例:HTMLファイル,XMLファイルなどが含まれる)を添付(アップロード)したとき、この添付したファイルは画面に表示せず、クリック時にダウンロードされるようにする。
  • Flash形式(拡張子がflv)はインラインで表示しない。

クロスサイトスクリプティング脆弱性につながる懸念があったため、原則は許可されたファイル以外の動作はダウンロードに統一しています。