2.4.4.2 多部分对象集合(Multipart)

多部分对象集合(Multipart

发送邮件时,我们可以在邮件里写入文字并添加多份附件,这是因为采用了 MIMEMultipurpose Internet Mail Extensions,多用途因特网邮件扩展)机制中的一种称为多部分对象集合(Multipart)的方法,来容纳多份不同类型的数据;

即多部分对象集合(Multipart)允许邮件处理文本、图片、视频等多个不同类型的数据;

        例如:图片等二进制数据以 ASCII 码字符串编码的方式指明;

相应地,HTTP 协议中也采纳了多部分对象集合,发送的一份报文主体内可含有多种类型实体,通常是在图片或文本文件等上传时使用;

此时报文的 Content-Type 值为(报文主体的MIME 类型):multipart/form-data; boundary=something;

multipart/form-data类型的报文主体包含多种类型实体,每个实体主要构成分为如下部分:

边界线;

通过媒体类型的可选参数指定;

例如:

multipart/form-data; boundary=----WebKitFormBoundarybi5XUwMxC7yc9s5a

boundary 字符串用来划分多部分对象集合指明的各类实体,但是在 boundary 字符串之前还会插入“--”标记;

当前实体首部

包含 content-dispositioncontent-typecontent-type出现在文件上传的时候;

还有一个空行用于表示当前实体首部的结束;

内容区域;

即实体内容(主体)

在多部分对象集合的最后,会插入“--boundary--”标记(例如:--AaB03x----THIS_STRING_SEPARATES--)作为多部分对象集合的结束;

例如:

<form action="http://localhost:8000/" method="post" enctype="multipart/form-data">

  <input type="text" name="myTextField">

  <input type="checkbox" name="myCheckBox">Check</input>

  <input type="file" name="myFile">

  <button>Send the file</button>

</form>

 

POST / HTTP/1.1

Host: localhost:8000

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Connection: keep-alive

Upgrade-Insecure-Requests: 1

Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498

Content-Length: 465

-----------------------------8721656041911415653955004498

Content-Disposition: form-data; name="myTextField"

Test

-----------------------------8721656041911415653955004498

Content-Disposition: form-data; name="myCheckBox"

on

-----------------------------8721656041911415653955004498

Content-Disposition: form-data; name="myFile"; filename="test.txt"   // 描述内容的基础配置

Content-Type: text/plain             // 描述了上传的文件类型

Simple file.

-----------------------------8721656041911415653955004498--

Content-Type: multipart/form-data; boundary=AaB03x

 

--AaB03x

Content-Disposition: form-data; name=“field1”

 

Joe Blow

--AaB03x

Content-Disposition: form-data; name=“pics”; filename=“file1.txt”

Content-Type: text/plain

 

…(file1.txt的数据)…

--AaB0x--

另外,可以在某个实体中嵌套使用多部分对象集合;

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值