処理の流れ
- ボタンをクリックする
- Type="File"のファイル参照ボタンを押したことにする
- ファイルを選択する
- ファイル名を取得したことでfileUploadイベントが動く
- ファイルを読み終えるとMagic xpaの変数にファイル名とBASE64形式のデータを保存する
- Magic xpaフォームで設定したボタンをクリックしたことにしてMagic側のクリックイベントを起動する
- サーバー側でBASE64形式のデータを実際のファイルに変換する
Magic xpa側
変数
必要な項目
BlobData | B=BLOB (ANSI) | ファイルの内容をBASE64形式で保存する変数 |
vFileName | A=文字(256) | ファイル名を保存する変数 |
BtnEvent | A=文字(20)プッシュボタン |
ファイルアップロードをおこなうボタン ファイルの選択ではありません |
上記の変数を画面に配置する
ロジック
- BlobSize(BlobData)>1で空白データかどうかをチェックする
- BlobFromBase64()でBASE64データをBlobに変換する
- Blb2File()でBlobデータを実際のファイルに変換する
HTMLを記述する
<input id="file_upload" type="file" style="display: none" (change)="fileUpload($event)" accept=".txt">
<mat-icon>attach_file</mat-icon> FileUpload</button>
SmartUXにて画面を構築します。
ただし、ウィジェットは配置せずに上記のようににコードを書きます。
コードを書く場合はSmartUXの「コードを見る」を押し、アクティブにします。
BtnEventとマッピングは行いません。
type="file" ファイル指定用のインプット項目。 style="display:none" とすることで見えなくしている。
ファイル名を変更することでfileUpload($event)という関数を呼び出している。
accept=".txt"なので拡張子がtxtのものを選択しようとしている。
次にテンプレートの右側にある「コンポーネント」を選択します。
override createFormControlsAccessor(formGroup: FormGroup) {
this.mgfc = new MgFormControlsAccessor(formGroup, this.magicServices);
}
と最下行の
}
の間に次のコードをコピーアンドペーストします。
fileUpload = (event) => {
const file = event.target.files[0];
if (!file) {
console.error('ファイルが選択されていません。');
return;
}
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
// FileReaderのresultをstring型として扱うための型アサーション
const result = reader.result as string;
const base64Data = result.split(',')[1];
// UIコントロールに値をセット
this.mg.setValueToControl(this.mgc.V_vFileName, file.name);
this.mg.setValueToControl(this.mgc.BlobData, base64Data);
// シミュレートされたクリックイベントをトリガー
this.mg.simulateClick(this.mgc.V_BtnEvent);
};
reader.onerror = (error) => {
console.error('ファイルの読み込み中にエラーが発生しました:', error);
};
}
fileUploadButton(): void {
document.getElementById('file_upload')?.click();
}
this.mg.setValueToControl(this.mgc.V_vFileName, file.name);
⇒ ファイル名をMagic xpaで設置したV_vFileNameに代入
this.mg.setValueToControl(this.mgc.BlobData, base64Data);
⇒ 読み取ったBlobデータをMagic xpaで設置したBlobDataに代入
this.mg.simulateClick(this.mgc.V_BtnEvent);
⇒ Magic xpaで設置したV_BtnEventを押したことにする
以上でファイルのアップロードが可能となります。
コメント
0件のコメント
サインインしてコメントを残してください。