画像(ファイル)添付
はじめに) 成果物を見る
 本稿では、下記のレコード呼び出し画面から、画像あるいはファイルを3枚まで添付できる帳票を呼び出すXcuteについて記述します。
Xcuteでは、ファイルはC:\InetPub\procgi14\Profilesフォルダーに保存され、それを管理するためファイル名をテーブルに持つやり方です。
このドキュメントをもとに、新たにファイルアップロード等をおつくりになる場合は、ロングファイル名モードの利用をおすすめいたします。本ドキュメント内の「アップされたファイルのエンコードの仕様について」を参照願います。
なお、Xcuteの動画入門書はここです。
図2の画面を作るXcuteの単票レポートについて)
 単票レポートは、単票テーブルとMyFileテーブルを持ち、親子の関係です。
子テーブルのファイル名には、アップロードされたファイル名(エンコードされている)が入ります。
読み込み(ReadReport)可能な親子テーブルの解説ははここを見てください。
図2の単票レポートのひな型の単票シート)
下記の赤色の枠は、「テーブル1レコードの読み書き範囲」です。
 子テーブルの読み書き範囲はあらかじめ3件分ひな型シートに作成して、不要な分は1列目で$$HIDEを指定してブラウザで隠しています。
$$HIDEや$$DELはここを参照
ファイルのアップロードの詳細 が示すよう、
 UpDirフォルダーはR9C8セルのphotoで、このフォルダーをC:\InetPub\procgi14\profilesに作成します。このphotoフォルダーにアップロードされたファイルは溜まります。
R22C9セルは、アップロードファイルの有無で次のように役割が変わります。
アップロードファイルが無い時、ファイルを新規にアップロードさせるためType=Fileとします。
アップロードファイルの有る時、ファイル名を表示させるHiddenタイプとして、右のR22C10セルには、ファイルを削除させるためのSubmitボタンとし、R22C12にDELをなげます。
アップされたファイルのエンコードの仕様について
ファイル名のエンコード方法は通常モードと、ロングファイル名対応モードの2種類があります。
各モードはproles.iniLongFileNameにて切り替えることが可能です。
LongFileName=0 で、従来通りのエンコードモード、LongFileName=1で、 ロングファイル名の対応となります。
従来モードは、XCuteの動作モードがShiftJISモードの場合、全角31文字(+拡張子半角3文字)まで。 UTF8モードは、全角16文字(+拡張子半角文字)までアップロード可能です。
ロングファイル名モードは、UTF-8で全角150-200文字程度。ShiftJISで全角300文字程度までアップロード可能です。(ファイル名をエンコードした際のサイズが1800文字まで)
従来モードは、 実ファイル名がエンコードされてprofilesフォルダに格納されますが、ロングファイル名モードは一律、NoNameというファイル名になります。ロングファイル名モードを使うときは、ファイル名をDBに格納しておく必要があります。
・従来モード時のファイル名は以下のルールとなります。
グリニッジ累積秒(10n) + 枝番(3n) + [フラグ] + "_" + URLエンコードファイル名
例:2019/6/12 10:25頃、xcute.gifというファイルを、UTF-8モードでアップロードした場合。
1560302721000u_xcute%2Egif
というファイル名で、profilesに格納されます。さらにこの格納ファイル名が、アップロードフォームの入力規則に返されます。
フラグの意味は以下の通りです
フラグなし=ファイル名がS-JIS
U=ファイル名がUTF-8
・ロングファイル名モード時のファイル名は以下のルールとなります。
グリニッジ累積秒(10n) + 枝番(3n) + "フラグ" + "_NoName%2e" + 拡張子
というファイル名で、profilesに格納されます。さらに、生のファイル名が、アップロードフォームの入力規則に返されます。
例:あいうえおかきくけこさしすせそたちつてと.jpgをアップロードした場合。
1560306886000L_NoName%2Ejpg
というファイル名でprofilesに格納されます。 アップロードフォームの入力規則には、profilesの格納ファイル名と、生のファイル名が「:」コロン文字を区切りとして返されます。
1560306886000L_NoName%2Ejpg:あいうえおかきくけこさしすせそたちつてと.jpg

フラグは、「L」が常に入ります。
従来モードのXCuteをお使いの方
すでに作成されたプロジェクトをロングファイル名に対応するには、ファイル名を格納するDBのフィールドの文字サイズを2000文字以上にすること(Accessならばメモ型)。
および、入力規則に返されるファイル名はエンコードされない形式で「:」コロン文字を区切りとして帰ってくるので、それを考慮したデコード行うこと。
の2点を注意してください。
このレポートのコントロール)
この「単票」レポートは、WriteReportで呼び出され、ボタン押下でReadReportされます。
WriteReportを指定する時は、レコードある時は、MykeyをR10C8に指定します。R2C8セルでは、R10C8セルでMyKey列にFilterを掛けています。
ボタンが押下されReadReportされるとファイルの新規追加や削除を行い、その後R3C8でWriteReportしてブラウザ画面を更新します。この時のWriteReportはブラウザでの再読み込みを遮断するためAfterReadシートでRefreshしています。
また、WriteReportまたはReadReport時にマクロFileProcがRunAされますが、ファイル名のデコードやファイルの削除(Kill)を実行しています。
以上