一尘不染

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

html

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

通常,我们不需要enctype为常规请求添加该属性。但是,在上传文件时,我们确实需要将其添加到HTML表单中,

enctype="multipart/form-data"

我很好奇,如果没有该enctype属性,为什么上传文件不起作用?


阅读 365

收藏
2020-05-10

共1个答案

一尘不染

“ multipart / form-data”编码类型由RFC1867指定,您可以在此处查看有关技术概述的更多信息。

在HTML表单中,数据表示为几个字段。当使用multipart /form-data作为enc类型时,浏览器将表单字段作为一系列“部分”发送,每个“部分”都有一个内容类型标头来描述存储在该部分中的数据类型。对于常规形式的字段,通常将此内容类型设置为“文本/纯文本”。仅当使用multipart
/ form-data编码类型时,此内容类型才由浏览器发送。

对于“文件”类型的输入元素,内容类型为“应用程序/八位字节流”或类似的内容,向服务器端软件指示该字段的内容不是典型的纯文本,而是文件的内容,应被不同地处理。

每当不使用“ multipart / form-data”时,“
file”类型的输入元素均不起作用的原因是由于服务器无法识别该字段的内容与普通文本字段有何不同(因为除非使用multipart / form-
data,否则浏览器不会发送content-
type),因此它将字段的内容作为普通文本处理。使用正确的enctype并且服务器可以正确识别字段包含的数据类型时,服务器知道将字段的内容作为文件数据而不是文本进行处理,并且可以对其进行适当的处​​理。

2020-05-10