ファイルアップロード
FormData への変換
ファイル(ネストされたファイルを含む)を含む Inertia リクエストを行う場合、Inertia はリクエストデータを自動的に FormData オブジェクトへ変換します。この変換は、XHR を通じて multipart/form-data リクエストを送信するために必要です。
データ内にファイルが含まれているかどうかに関わらず、常に FormData オブジェクトを使用したい場合は、リクエスト時に forceFormData オプションを指定できます。
FormData インターフェースについての詳細は、MDN ドキュメントをご覧ください。
ファイルアップロードの例
Inertia を使用した完全なファイルアップロードの例を見てみましょう。この例には、name のテキスト入力と avatar のファイル入力の両方が含まれています。
この例では、現在のアップロード進捗へ簡単にアクセスできるため、利便性を考慮して Inertia フォームヘルパー を使用しています。ただし、手動の Inertia ビジット を使ってフォームを送信することも可能です。
Multipart の制限事項
multipart/form-data リクエストを使用したファイルアップロードは、PUT、PATCH、DELETE の HTTP メソッドを使用する場合、一部のサーバーサイドフレームワークではネイティブにサポートされていません。この制限に対する最も簡単な回避策は、ファイルのアップロードに POST リクエストを使用することです。
ただし、Laravel や Rails のように、フォームメソッドスプーフィングをサポートしているフレームワークもあります。これにより、POST を使ってファイルをアップロードしつつ、フレームワーク側ではリクエストを PUT や PATCH として処理させることができます。これは、リクエストデータに _method 属性を含めることで実現されます。