为什么上传文件的表单里要加个属性enctype----摘录

news/2024/10/3 19:54:46

 

上传文件的表单中<form>要加属性enctype="multipart/form-data",很多人只是死记硬背知道上传表单要这么写,知其然而不知其所以然。那到底为什么要添加这个属性呢?它是什么意思呢?它又有什么其他可选值呢?
其实form表单在你不写enctype属性时,也默认为其添加了enctype属性值,默认值是enctype="application/x-www-form-urlencoded".这个属性管理的是表单的MIME编码,共有三个值可选:
①application/x-www-form-urlencoded (默认值)
②multipart/form-data
③text/plain
其中①application/x-www-form-urlencoded是默认值,大家可能在AJAX里见过这个:xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 这两个要做的是同一件事情,就是设置表单传输的编码。在AJAX里不写有可能会报错,但是在HTML的form表单里是可以不写enctype="application/x-www-form-urlencoded"的,因为默认HTML表单就是这种传输编码类型。而②multipart-form-data是用来指定传输数据的特殊类型的,主要就是我们上传的非文本的内容,比如图片或者mp3等等。③text/plain是纯文本传输的意思,在发送邮件时要设置这种编码类型,否则会出现接收时编码混乱的问题,网络上经常拿text/plain和text/html做比较,其实这两个很好区分,前者用来传输纯文本文件,后者则是传递html代码的编码类型,在发送头文件时才用得上。①和③都不能用于上传文件,只有multipart/form-data才能完整的传递文件数据。
上面提到的MIME,它的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。
简单说,MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
浏览器接收到文件后,会进入插件系统进行查找,查找出哪种插件可以识别读取接收到的文件。如果浏览器不清楚调用哪种插件系统,它可能会告诉用户缺少某插件,或者直接选择某现有插件来试图读取接收到的文件,后者可能会导致系统的崩溃。传输的信息中缺少 MIME标识可能导致的情况很难估计,因为某些计算机系统可能不会出现什么故障,但某些计算机可能就会因此而崩溃。
   检查一个服务器是否正确设置了MIME类型的步骤是:
1. 在Netscape浏览器中打开服务器网页
2. 进入"View"菜单,选择"Page Info"
3. 在弹出的窗口中点击上层框架中的"EMBED"
4. 在下层框架中查看MIME的类型是否为"application/x-director"或"application/x-shockwave-flash",如果是上述信息的话表明服务器已经正确设置了MIME类型;而如果MIME类型列出的是文本内容、八位一组的数据或是其它形式均表明服务器的MIME类型没有设置正确。
如果服务器没有正确标明其发送的数据的类型,服务器管理员应该正确添加相关信息,具体操作方法非常简单快捷。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型
  超文本标记语言文本 .html,.html text/html
  普通文本 .txt text/plain
  RTF文本 .rtf application/rtf
  GIF图形 .gif image/gif
  JPEG图形 .jpeg,.jpg image/jpeg
  au声音文件 .au audio/basic
  MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
  RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
  MPEG文件 .mpg,.mpeg video/mpeg
  AVI文件 .avi video/x-msvideo
  GZIP文件 .gz application/x-gzip
  TAR文件 .tar application/x-tar

  Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzip,x-tar等。事实上这些类型运用的很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。

转载于:https://www.cnblogs.com/whsa/p/3913265.html


https://dhexx.cn/news/show-1023669.html

相关文章

python二级考试试题库_python二级考试-试题8.doc

python二级考试-试题8.doc -1.数据库设计中反映用户对数据要求的模式是___________。A概念模式B内模式C设计模式D外模式正确答案2.一个工作人员可使用多台计算机&#xff0c;而一台计算机被多个人使用&#xff0c;则实体工作人员与实体计算机之间的联系是___________。A多对一…

Hadoop的分布式架构改进与应用

1. 背景介绍 谈到分布式系统&#xff0c;就不得不提到Google的三驾马车:GFS[1],MapReduce[2]和BigTable[3]。 虽然Google没有开源这三个技术的实现源码&#xff0c;但是基于这三篇开源文档, Nutch项目子项目之一的Yahoo资助的Hadoop分别实现了三个强有力的开源产品&#xff1a…

安卓学习-界面-ui-Adapter

Adapter分一下几种类别 ArrayAdapter:ListView那边基本上已经讲过了&#xff0c;没什么特殊的&#xff0c;就是一个数组 SimpleAdapter&#xff1a;比较强大了功能&#xff0c;基本上ListView都是用他的 SimpleCursorAdapter:和SimpleAdapter差不多&#xff0c;包装了cursor提供…

working set的使用

http://www.oschina.net/question/16_10731转载于:https://www.cnblogs.com/silentjesse/p/4667585.html

计算机怎样发现路由器上u盘,路由器上USB插口的4大功能,估计你连一个都没用过...

原标题&#xff1a;路由器上USB插口的4大功能&#xff0c;估计你连一个都没用过离线下载使用离线下载功能&#xff0c;我们无需打开计算机就可以下载在线资源。将U盘或移动硬盘插入路由器的USB端口&#xff0c;然后登录到路由器或相应的管理APP的后台以添加下载任务。这样&…

java基础问题总结

1.抽象&#xff1a;  抽象就是忽略一个主题中与当前目标无关的那些方面&#xff0c;以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题&#xff0c;而只是选择其中的一部分&#xff0c;暂时不用部分细节。抽象包括两个方面&#xff0c;一是过程抽象&#xff0c…

hdu 5414 CRB and String

考虑输出yes的几种情况 - s和t直接相等 - 不相等时&#xff0c;s长度小于t - s是t的子串 - t的开头几个字母都相同时&#xff0c;s的也必须相同 #include<bits/stdc.h> using namespace std;char s[1000005],t[1000005]; int main() {int _,i,j;int flag;//freopen(&…

mysql 时间判断_MYSQL 中间件 为什么选择 PROXYSQL VS MHA

MYSQL 的中间件其实也不少&#xff0c;但实际上用的比较广的&#xff08;非分库分表&#xff09;的选择点基本上会落到 PROXYSQL 和 MyRouter 两个中间件中&#xff0c;1使用的人数多&#xff0c;2 丰富的文档和相当多的案例实际上proxysql 可以算是一个支持广泛的中间件&#…

[C++ Calculator 项目] 基础运算实现

Calculator V1.1 注&#xff1a;这是C计算器项目第二部分-运算 [基于初始部分增改而得] 源文件已上传至github 主要问题&#xff1a; Ⅰ.运算实现的问题在于( ) - * /的优先级的处理&#xff0c;以及对-的处理 Ⅱ.命令行参数如何进行合法性检查和判断 编写想法&#xff1a; ()…

Linux安装php扩展memcache

Linux安装php扩展memcache php扩展memcache的作用是为了支持memcached数据库缓存服务器&#xff0c;下面是安装方法。1、下载并解压memcache文件 wget -c http://pecl.php.net/get/memcache-3.0.6.tgztar xzvf memcache-3.0.6.tgzcd memcache-3.0.62、执行phpize扩展安装程序&a…