teakun.dev

multipart/form-data入門

仕事でmultipart/form-dataでファイルアップロードをする実装することになったけど、どういうものか全然わかっていないので調べる。

そもそもなにか

HTTPのリクエストで複数のデータをまとめて送るための仕組み。 例えば、プロフィールを登録するような場合に、名前と画像をセットでアップロードするようなときに使う。

header

Content-Typeにはこのような指定が入る。

Content-Type: multipart/form-data; boundary=--<バウンダリ文字列>\r\n

バウンダリ文字列というのがミソで、これが送信したい複数のデータの区切りになる。 なので、この文字列はデータ中には出てこないような無難な乱数が入るのがよい。

body

bodyの例。1つ目にテキスト、2つ目に画像を送るような場合で考える。

--<バウンダリ文字列>\r\n
Content-Disposition: form-data; name="<1つ目の名前>"\r\n
\r\n
<1つ目のデータ>
--<バウンダリ文字列>\r\n
Content-Disposition: form-data; name="<2つ目名前>"; filename="<ファイル名>"\r\n
Content-Type: image/jpeg\r\n
\r\n
<画像のバイナリ>
--<バウンダリ文字列>--\r\n

参考