Next.jsでのmultipart/form-dataの取り扱い
概要
Next.jsにおいてFEからmultipart/form-dataでデータをBFFに送り、そこからさらにBEにmultipart/form-dataで送る
今回の手法はFileとstringやnumberが混在したフォームデータに対応している
処理の流れ
1. FE to BFF
- fileのinputでonChangeのevent.target.filesからFileを取得
- File以外のデータもフォームで入力
- 必要なデータをFormDataにセットする
- FormDataをリクエストボディに指定してBFFのAPIをfetchで叩く。このときbodyにはシリアライズせずにFormDataをそのまま入れる(headerについてはboundryも含めて内部でいい感じに処理してくれるので設定しなくていい)
2. BFF to BE
- Next.jsのAPI処理部分ではconfigでbodyParserを無効化する
- formidableでreqからパースしてfieldsとfilesを得る
- fieldsとfilesをform-dataのFormDataに変換する。このときfilesにあるFileについてはそのままセットするのではなくformData.append(key, fs.createReadStream(files[key].path), files[key].name)とする
- bodyにはシリアライズせずにFormDataをそのまま入れてfetchを呼ぶ(headerについてはboundryも含めて内部でいい感じに処理してくれるので設定しなくていい)