表单的enctype="multipart/form-data"

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了表单的enctype="multipart/form-data"相关的知识,希望对你有一定的参考价值。

在通过表单上传文件的时候,需要输入enctype="multipart/form-data"

最早的HTTP POST是不支持文件上传的,给编程开发带来很多问题。但是在1995年,ietf出台了rfc1867,也就是《RFC 1867 -Form-based File Upload in HTML》,用以支持文件上传。所以Content-Type的类型扩充了multipart/form-data用以支持向服务器发送二进制数据。因此发送post请求时候,表单<form>属性enctype共有二个值可选,这个属性管理的是表单的MIME编码:

 ①application/x-www-form-urlencoded(默认值)
 ②multipart/form-data
其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x- www-form-urlencoded".

 

http协议本身的原始方法不支持multipart/form-data请求,那这个请求自然就是由这些原始的方法演变而来的:

1、multipart/form-data的基础方法是post,也就是说是由post方法来组合实现的

2、multipart/form-data与post方法的不同之处:请求头,请求体。

3、multipart/form-data的请求头必须包含一个特殊的头信息:Content-Type,且其值也必须规定为multipart/form-data,同时还需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了

4、multipart/form-data的请求体也是一个字符串,不过和post的请求体不同的是它的构造方式,post是简单的name=value值连接,而multipart/form-data则是添加了分隔符等内容的构造体。

 

对于上传上来的文件,使用$_FILES数组来存放,可以通过操作$_FILES数组来处理上传上来的文件。

$_FILES数组是一个索引数组,可以像处理平常的数组一样处理它。

以上是关于表单的enctype="multipart/form-data"的主要内容,如果未能解决你的问题,请参考以下文章

C# form表单提交enctype="multipart/form-data" 与 enctype="application/x-www-form-urlencoded

form表单中enctype="multipart/form-data"的传值问题

表单的enctype="multipart/form-data"

当存在enctype属性时,"name "属性的值没有被发送到表单中(Express, Mongo, Node)。

node进阶| 解决表单enctype="multipart/form-data" 时获取不到Input值的问题

HTTP form表单提交数据(enctype="multipart/form-data" method="post")的服务端处理