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

标签 html forms upload

大多数时候,文件上传错误的根源是我们忘记在 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/

相关文章:

javascript - 无法使用parent的类名获取隐藏字段值

html - 如何使 div 的宽度超出父级的宽度?

PHP 表单处理未发送正确的电子邮件

spring-mvc - Spring MVC 中的 UTF-8 编码,FORM 问题

php 安全和可扩展的文件管理

javascript - 处理表单元素值的函数

javascript - 表单操作未通过 php/html 发布

c# - 上传速度问题: HttpWebRequest

c# - 测试 asp.net 项目 IHttpHandler , Request.Files 问题

html - 如何对齐固定列的表格和内容相邻的表格