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

Ei *_*ung 25 html forms upload

大多数时候,文件上传错误的来源是我们忘记enctype在HTML表单中添加属性.

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

enctype="multipart/form-data"
Run Code Online (Sandbox Code Playgroud)

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

小智 29

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

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

对于"文件"类型的输入元素,内容类型是"application/octet-stream"或类似的东西,它向服务器端软件指示该字段的内容不是典型的明文,而是文件的内容,应该处理方式不同.

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


Jam*_*ack 5

你可能想看看这里的评论:http : //www.velocityreviews.com/forums/t137597-html-file-upload-using-enctype-multipart-form-data-in-form.html

简短的回答是 enctype 告诉浏览器如何发送文件。如果没有正确的编码类型,它将无法发送文件。