我在网上阅读了一些使用HTTP /(Ajax)发送文件的文章。在阅读时我发现需要为文件设置BOUNDARY等内容。
我不明白这是什么?为什么?有人可以帮我理解这一点。
答案 0 :(得分:1)
在具有enctype="multipart/form-dat
a的多部分表单中,客户端使用边界字符串,该字符串将输入字段与上载的文件分开,并在不同文件之间分隔。这是任何表单提交的数据中都不存在的字符串,包括文件数据。边界有助于服务器正确地解析数据以将输入字段与文件数据分开,因为所有数据都是在单个请求中发送的。
选择在任何数据中都不会出现的边界。 (这种选择有时是概率性的。)
来自同一RFC的示例:
假设服务器提供以下HTML:
<FORM ACTION="http://server.dom/cgi/handle"
ENCTYPE="multipart/form-data"
METHOD=POST>
What is your name? <INPUT TYPE=TEXT NAME=submitter>
What files are you sending? <INPUT TYPE=FILE NAME=pics>
</FORM>
并且用户在名称字段中键入“Joe Blow”,并选择文本 文件“file1.txt”代表“你发送什么文件?”的答案。 客户端可能会发回以下数据:
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
... contents of file1.txt ...
--AaB03x--
答案 1 :(得分:0)
HTTP消息只有一个主体,并且只能有一个内容类型。这就是为什么multipart messages是零件集合的原因。并且这些部分由边界分开。请参阅this answer for a schematic example of how a multipart message。