45 html specifications file-upload http rfc
<form enctype=multipart/form-data>将文件上传到Web服务器时为什么需要?
Nat*_*lor 76
它与浏览器如何打包二进制文件和表单数据以便通过HTTP传输有关.默认情况下,仅发送表单数据,但如果表单需要支持上载文件,则还必须附加二进制数据并将其与表单数据分开.
Scott Hanselman 在这里给出了一个很好的解释:
HTTP和文件上载如何通过HTTP工作
对我来说,了解为什么以及如何发生事情总是更好.如果你说"只是因为"或"无论如何,你只需添加它,并且它有效",那么我认为这很难过.出于某种原因,虽然许多人都了解FORM POST,并且通常如何将表单数据传递到服务器,但是当文件被传输时,许多人只是总结它的魔力.为什么我们必须在包含文件上传的表单上添加enctype ="multipart/form = data"?因为表单现在将以多个部分进行POST.
如果你有这样的表格:
<form action="/home/uploadfiles" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
生成的表单POST将如下所示(略微简化):
POST /home/uploadfiles HTTP/1.1
Content-Type: multipart/form-data; boundary=---------------------------7d81b516112482
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64)
Content-Length: 324
-----------------------------7d81b516112482
Content-Disposition: form-data; name="file"; filename="\\SERVER\Users\Scott\test.txt"
Content-Type: text/plain
foo
-----------------------------7d81b516112482
Content-Disposition: form-data; name="submit"
Submit
-----------------------------7d81b516112482--
Run Code Online (Sandbox Code Playgroud)
请注意有关此POST的一些信息.首先,注意content-type和boundary =""以及稍后如何使用边界,正好是多个部分之间的边界.看看第一部分如何显示我上传了一个text/plain类型的文件.您可以根据这些内容插入多个文件,如果它们都是一次性发布的话.
当然,如果它只是一个没有包含enctype ="multipart/form = data"的基本表单POST,那么看看它会有多么不同:
POST /home/uploadfiles HTTP/1.1
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64)
Content-Length: 13
submit=Submit
Run Code Online (Sandbox Code Playgroud)
看看内容类型有何不同?这是一个常规的典型表单POST.也许是非典型的,因为它只包含一个提交按钮!....
顺便说一句,如果你查看了一个包含多个附加文件的电子邮件,它看起来与第一个HTTP消息的主体非常类似,因为随处可见多部分MIME编码,这与大多数好主意很常见.
这是RFC-1867中描述的 HTML 文件上传规范的一部分,该提案允许以 HTML 形式上传文件(大约 1995 年)。
从第 2 节开始:
该提案对 HTML 进行了两处更改:
1) 为INPUT的TYPE属性添加FILE选项。
2) 允许 INPUT 标签的 ACCEPT 属性,它是允许输入的媒体类型或类型模式的列表。此外,它还定义了新的 MIME 媒体类型 multipart/form-data
,并指定了 HTML 用户代理在解释 带有ENCTYPE="multipart/form-data"和/或标签的表单时的行为<INPUT type="file">
。
当您设置enctype为 时multipart/form-data,浏览器会使用“多部分边界”分隔上传中的每个文件或附件,该边界是定义每个“部分”的开始和结束的唯一标识符。
这允许浏览器在一个请求中发送多个部分(因此得名),并使用其自己的元数据(如 MIME 类型、文件名等)来标识每个部分。
| 归档时间: |
|
| 查看次数: |
53152 次 |
| 最近记录: |