「画像アップロード」のセル型を使用すると、Forguncyのアプリケーションから1つずつ指定して画像ファイルをテーブルに登録できます。ここでは1つずつではなく、一括でフォルダ内の複数の画像ファイルを登録する方法を説明します。
これによって、例えば、異なるシステムで使用していた複数の画像ファイルがあった場合でも、一括でデータベースに登録でき、Forguncyのアプリケーションから参照できるようになります。
Forguncyの仕組みについて
画像ファイルを一括でアップロードするには、コマンドを組み合わせて、任意のフォルダ内の画像ファイルをデータベースへ一括保存するアプリケーションを開発する必要があります。そのために、Forguncyの仕組みを説明します。
Forguncyで画像アップロード型セルから画像をアップロードすると、保存される内容は、データベースのフィールドの型によって、次のとおり異なります。
- 外部データベースのテキスト型のフィールドか、内部テーブルの画像型のフィールドに保存する場合
テーブルのフィールドの値は、文字列(ファイル名の先頭にGUIDが付与された文字列)が保存されます。画像がそのまま格納されるわけではありません。
(例)「商品.png」をアップロードした時、テーブルのフィールドに保存される値
形式:<36桁のGUID>_<画像ファイル名>.png
値の例:3debc4cd-3dc7-408d-9509-7cf565c94aab_商品.png
その画像ファイルの実体は、サーバーの別の場所に保存され、そのファイル名は、テーブルに保存されている文字列の値(GUIDが付与されたファイル名)で保存されます。
ファイルの保存先は、以下のナレッジに記載の特定フォルダに保存されます。
[V8] アップロードしたファイルはどこに保存されますか? - 外部データベースのバイナリ型のフィールドに保存する場合
テーブルのフィールドには、画像がそのまま格納されます。
ここでは、上記1.の場合に一括登録する方法を記載します。
1.の場合に複数画像を一括登録するには、テーブルのフィールドに保存されたGUID付きのファイル名の文字列と実体のファイル名が一致した状態で、かつ実体のファイルがForguncyの特定フォルダに保存されている必要あります。
このような状態になるように、プログラムを作成する必要があります。
参考:
1.は2.の方法に比べ、直接データベース上に画像ファイルを保持していないため、一覧表示時の通信量削減と、詳細ページ表示時の画質の維持を期待できる可能性があります。このため、特別な理由がない限り1.をおすすめします。詳細は、[V8] ページの表示に時間がかかりますの「リストビューに画像を一覧表示している」を参照してください。
開発するプログラムについて
プログラムの大きな流れとして、Forguncyのサーバーサイドコマンドを利用して画像フォルダ内のファイルを読み込んで、1ファイルずつ「繰り返し」コマンド内でGUID付きのファイル名作成と保存を行います。
詳細は以下の手順を参照してください。
(1)前提として、テーブルに一括登録したい画像を特定のフォルダに保存しておきます。
(2)画像フォルダ内のファイルを読み込むには、プラグインである「ファイル操作コマンド」の「フォルダー上のファイル取得」を使用します。
そして、読み込んだ画像ファイルを「繰り返し(サーバーサイド)」コマンド内で「テーブルデータの更新(サーバーサイド)」を使用してテーブルに追加していきます。
(3)(2)でテーブルに追加したとき、画像ファイルの場合は自動的にGUIDが付与されて保存されません。このため、GUIDを生成し、GUIDが付与されたファイル名の文字列を登録する処理を行う必要があります(「添付ファイル」のデータ型の場合は、自動でGUIDが付与されるため、GUIDを意識する必要はありません)。
それには、次のような処理を行います。
- まず1回目の「テーブルデータの更新(サーバーサイド)」コマンドで「%GUID%」というForguncyのキーワードを使用して、GUIDを生成してテーブルに保存します(「%GUID%」キーワードは「テーブルデータの更新」コマンド内でのみ使用でき、フィールドに「%GUID%」を指定することで自動的にGUIDが生成されて保存されます)。
このようにして、一旦「テーブルデータの更新」コマンドでGUIDを画像フィールドに新規登録しておきます。登録したレコードは、以下の画像の場合「NewRecord」という変数で参照できるようになります。 - 続けて、登録されたGUIDを取得するために「変数の設定」コマンドを使用します。
1.で登録したレコードは、以下の画像のように「NewRecord.ID」という変数でクエリーで抽出できます。「画像」フィールドのGUIDを取得して「GuidNumber」変数に格納します。 - 2.で取得した「GuidNumber」をファイル名と連結させたものを、2回目の「テーブルデータの更新(サーバーサイド)」コマンドで上書きします。
- 画像ファイルの実体を、Forguncyの保存フォルダーにコピーします。
保存フォルダは、運用環境の場合、以下のナレッジに記載の特定フォルダに保存されますので、本アプリケーションを運用時に使用するならば、保存場所を同じにする必要があります。
[V8] アップロードしたファイルはどこに保存されますか?
ここでは、開発環境で動作するように、プロジェクトと同じフォルダ内の「プロジェクト名_fgcfiles」フォルダにコピーします。
例:「c:\アップロードテスト」フォルダに「一括アップロード(画像).fgcp」を配置。
そして、「c:\アップロードテスト\一括アップロード(画像)_fgcfiles」フォルダに実体をコピー。 - 「プログラムの実行」コマンドでWindowsの標準コマンド「cmd.exe」を使い、4.でコピーした実体のファイルを、先頭にGUIDがついたファイル名にリネームします。リネームを行うための「引数の追加(オプション)は、以下の通りです。
(例)="/C REN "&"c:\アップロードテスト\一括アップロード(画像)_fgcfiles\"&ImageFileName&" "&GuidNumber&"_"&ImageFileName
参考:「プログラムの実行」「cmd.exe」を使用するには、Forguncyの実行ユーザーにcmd.exeを実行する権限が付与されている必要があります。
開発環境の場合は、WindowsのOS起動時にログインしたユーザー権限で実行されます。
運用環境の場合は、Forguncy Serverの実行アカウントに設定したユーザー権限で実行されます。変更したい場合は、以下を参照してください。
Forguncy Serverの実行アカウントの変更 - デバッグ実行を行います。
(1)で準備した登録したい画像ファイルが保存してあるフォルダを指定して、「添付ファイルの一括登録」ボタンを押します。すると、4.で指定したフォルダ「c:\アップロードテスト\一括アップロード(画像)_fgcfiles」にGUIDがついた画像ファイルが出力されますので、出力されたファイルをどこか別のフォルダに退避しておきます(デバッグ実行を終了し、Builderを閉じたり、アプリケーションを発行すると消えてしまうため)。 - デバッグ実行終了時に以下のメッセージが表示されます。テーブルに保存するように「はい」をクリックします。
- アプリケーションを発行し、サーバーにアプリケーションとテーブル一式を発行します。
この時点では画像ファイルの実体がサーバー上に存在しないため、画像は表示されません。 - サーバー管理ポータルの保存フォルダに、6.で出力したファイルを手動で一括コピーしてください。
サーバー管理ポータルで保存フォルダを指定していなければ、既定では以下が保存フォルダになります。
こちらにコピーすることで、アプリケーションを実行した際に画像が表示されるようになります。
・Windows版Forguncy Server:
C:\Users\Public\Documents\ForguncyServer\<アプリケーション名>\Upload
[V8] アップロードしたファイルはどこに保存されますか?
上記の処理を実装させたサンプルプロジェクトを添付していますので参考にしてください。
添付のプロジェクトには、「添付ファイルの一括登録」ボタンがあり、そのコマンドでサーバーサードコマンドを呼び出しています。