1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[multipart/form-data][MIME]マルチパート?なにそれ?

Posted at

はじめに

先日Expressでファイルダウンロードを処理する際に「マルチパートはー」と会話に出てきてついていけなかったので調査しました。その備忘録です。

ざっくりとマルチパートって?

multipart/form-dataのことだそうです。
いわゆるMIME TYPEの一つで、HTTPヘッダーのContent-Typeに入れて使うことが多そうですね。
主な活用シートとしてはexcelファイルなどをアップロードするときに使うそうです。

MIME TYPEって?

MDNから引用すると

メディアタイプ (別名 Multipurpose Internet Mail Extensions または MIME タイプ) は、文書、ファイル、またはバイト列の性質や形式を示す標準です。 IETF の RFC 6838 で定義され、標準化されています。

のように定義されています。ようするにデータの型のような認識ですかね。ちなみにマイムタイプと呼ぶそうです。(ミメだと思ってた。。。)

MEME TYPEの形式は

タイプ/サブタイプの形式になっており、 タイプサブタイプのみで構成されることはありません。
ex) application/json

multipart/form-data

MDNから引用すると

multipart/form-data タイプは、入力済みの HTML フォーム の内容をブラウザーからサーバーに送信するときに使用することができます。

これはマルチパート文書形式として複数の部分から成り、境界 (二重ダッシュ -- で始まる文字列) によって区切られます。それぞれの部分は固有のエンティティであり、固有の HTTP ヘッダーとして Content-Disposition やファイルアップロードのフィールドには Content-Type を持ちます。

このMIME TYPEはHTMLフォームからデータを送る際に使い。複数データをいっぺんに送ることが可能ということですね。
また、データそれぞれにMIMEを指定することができるそうです。

リクエストは以下のようになるそうです。

Content-Type: multipart/form-data; boundary=aBoundaryString
(マルチパート文書全体に関連付けられる、他のヘッダー)

--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg

(データ)
--aBoundaryString
Content-Disposition: form-data; name="myField"

(データ)
--aBoundaryString
(サブパート)
--aBoundaryString--

--aaBoundaryStringはデータの境界を表しており、リクエストごとに変わります。
(サブパート)と書いてある部分はContent-typeなどとデータのまとまりを表しています。

おわりに

別の記事でExpressを使って具体的に説明できるようなもの作ってみたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?