大多数时候,文件上传错误的根源是我们忘记在 HTML 表单中添加 enctype
属性。
一般情况下,我们不需要为常规请求添加enctype
属性。但是,我们确实需要在上传文件时将此添加到 HTML 表单中,
enctype="multipart/form-data"
我很好奇,为什么没有 enctype
属性就无法上传文件?
最佳答案
“multipart/form-data”enctype 由 RFC 1867 指定,您可以查看 here有关更多技术概述。
在 HTML 表单中,数据表示为多个字段。当使用 multipart/form-data 作为 enc 类型时,浏览器将表单字段作为一系列“部分”发送,每个部分都有一个内容类型 header 来描述存储在该部分中的数据类型。对于普通表单字段,此内容类型通常设置为“text/plain”。此内容类型仅在使用 multipart/form-data enctype 时由浏览器发送。
对于"file"类型的输入元素,内容类型是“application/octet-stream”或类似的东西,它向服务器端软件表明该字段的内容不是典型的明文,而是一个文件,应该以不同的方式处理。
当不使用“multipart/form-data”时,“file”类型的输入元素不起作用的原因是服务器无法识别字段的内容与普通文本字段(因为浏览器不会发送内容类型,除非使用 multipart/form-data)所以它将字段的内容作为普通文本处理。当使用正确的 enctype 并且服务器可以正确识别字段包含的数据类型时,服务器知道将字段的内容作为文件数据而不是文本来处理,并且可以正确处理它。
关于html - 为什么没有 enctype 属性文件上传不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695246/