mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 20:30:23 +00:00
54 lines
1.8 KiB
Markdown
54 lines
1.8 KiB
Markdown
![]() |
Introduction to multipart
|
||
|
=========================
|
||
|
|
||
|
Multipart originates from MIME, an Internet standard that
|
||
|
extends the format of emails. Multipart messages are a
|
||
|
container for parts of any content-type.
|
||
|
|
||
|
For example, a multipart message may have a part
|
||
|
containing text and a second part containing an
|
||
|
image. This is what allows you to attach files
|
||
|
to emails.
|
||
|
|
||
|
In the context of HTTP, multipart is most often used
|
||
|
with the `multipart/form-data` content-type. This is
|
||
|
the content-type you have to use when you want browsers
|
||
|
to be allowed to upload files through HTML forms.
|
||
|
|
||
|
Multipart is of course not required for uploading
|
||
|
files, it is only required when you want to do so
|
||
|
through HTML forms.
|
||
|
|
||
|
Structure
|
||
|
---------
|
||
|
|
||
|
A multipart message is a list of parts. Parts may
|
||
|
contain either a multipart message or a non-multipart
|
||
|
content-type. This allows parts to be arranged in a
|
||
|
tree structure, although this is a rare case as far
|
||
|
as the Web is concerned.
|
||
|
|
||
|
Form-data
|
||
|
---------
|
||
|
|
||
|
In the normal case, when a form is submitted, the
|
||
|
browser will use the `application/x-www-form-urlencoded`
|
||
|
content-type. This type is just a list of keys and
|
||
|
values and is therefore not fit for uploading files.
|
||
|
|
||
|
That's where the `multipart/form-data` content-type
|
||
|
comes in. When the form is configured to use this
|
||
|
content-type, the browser will use one part of the
|
||
|
message for each form field. This means that a file
|
||
|
input field will be sent in its own part, but the
|
||
|
same applies to all other kinds of fields.
|
||
|
|
||
|
A form with a text input, a file input and a select
|
||
|
choice box will result in a multipart message with
|
||
|
three parts, one for each field.
|
||
|
|
||
|
The browser does its best to determine the content-type
|
||
|
of the files it sends this way, but you should not
|
||
|
rely on it for determining the contents of the file.
|
||
|
Proper investigation of the contents is recommended.
|