为什么没有 enctype 属性文件上传不起作用?

29

大多数情况下,文件上传错误的源头是我们忘记在HTML表单中添加enctype属性。

通常,在常规请求中我们不需要添加enctype属性。但是,在上传文件时,我们需要在HTML表单中添加此属性。

enctype="multipart/form-data"

我只是好奇,为什么不设置 enctype 属性上传文件就无法正常工作?

2个回答

33

"multipart/form-data" enctype是由RFC 1867指定的,您可以在此处查看更多技术概述。

在HTML表单中,数据表示为多个字段。当使用multipart/form-data作为enc type时,浏览器将表单字段作为一系列“部分”发送,每个部分都有一个content-type头来描述存储在该部分中的数据类型。对于普通表单字段,此content-type通常设置为"text/plain"。仅当使用multipart/form-data enctype时,浏览器才会发送此content-type。

对于类型为“file”的输入元素,内容类型为“application/octet-stream”或类似内容,这表明服务器端软件应以不同的方式处理该字段的内容,因为它们不是典型的纯文本。

类型为“file”的输入元素在未使用“multipart/form-data”时无法工作的原因是由于服务器无法识别该字段内容与普通文本字段有何区别(因为浏览器不发送Content-Type,除非使用了multipart/form-data),所以它将字段内容处理为普通文本。当使用正确的enctype并且服务器可以正确地识别字段包含的数据类型时,服务器知道将字段内容处理为文件数据而不是文本,并且可以正确处理它。

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接