上传文件的表单中<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类型,才需要同时设置服务器和客户浏览器,以进行识别。

为什么上传文件的表单里要加个属性enctype相关推荐

  1. 七牛云上传文件之表单上传文件

    本人愚钝,七牛云上传文件的开发说明文档看了好久才搞懂,才能完成一个实例跑起来.现在做一下总结. 1.注册七牛,新建一个bucket,并获得ak,sk这个不用说了.不涉及到程序编码,重点讲一下编码的流程 ...

  2. .form文件_含文件上传的form表单AJAX提交小结

    最近在学习PHP时,遇到不知道如何含文件上传的form表单AJAX提交,现在把这些记录下来以备自己后续复习时用: HTML代码 *姓名: *性别: {eq name='list.sex' value= ...

  3. php v9 上传_phpcms v9 表单添加文件上传字段

    phpcms v9 表单添加文件上传字段 1.打开目录 ./phpcms/modules/content/fields/ ;把 文件夹downfile,拷贝到目录./phpcms/modules/fo ...

  4. Retrofit 2.0 超能实践(三),轻松实现多文件/图片上传/Json字符串/表单

    通过前两篇姿势的入门 Retrofit 2.0 超能实践,完美支持Https传输 Retrofit2.0 完美同步Cookie实现免登录 本文出自:http://blog.csdn.net/sk719 ...

  5. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

  6. java action 上传文件_Struts2实现单文件或多文件上传功能

    一.简述 Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置, 二.指定用户上传文件的大小,有两种方式 1)默认是在default.proper ...

  7. springboot并发上传文件_springboot实现单文件和多文件上传

    本文实例为大家分享了springboot实现单文件/多文件上传的具体代码,供大家参考,具体内容如下 package com.heeexy.example.controller; import com. ...

  8. HTTP上传数据 :表单,二进制数据(multipart/form-data application/octet-stream boundary)...

    使用WinINet 一个较简单的例子:上传头像 void CBackstageManager::UpdateAvatarThreadProc(LPVOID params) {stForThread* ...

  9. uniapp实现表单提交带图片上传 在做表单提交的时候,我们可能面临有图片上传,放在原生的html就好解决,form标签加上

    enctype="multipart/form-data" uniapp微信小程序 1.原图 页面部分 <form :model="data" @subm ...

最新文章

  1. GSM协议编号及其内容
  2. java反射机制--reflection
  3. 来自 Facebook 内部的 Python 学习知识图谱,太全了!
  4. scanf 用法大全
  5. 我的内容管理系统(CMS)寻找历程 -- Mambo出鞘,谁与争锋?
  6. 论文阅读-FASPell: A Fast, Adaptable, Simple, Powerful Chinese Spell Checker Based
  7. 10个修复ie6下bug技巧[转]
  8. 浅谈数据迁移测试(转载)
  9. Luogu2279[HNOI2003] 消防局的设立
  10. linux中c语言开发环境,1.1 Linux下的C语言开发环境
  11. 信息化项目软件运维费用都有哪些构成?
  12. 反向代理服务器域名解析
  13. 免费软件不比付费软件逊色半分之94款免费软件
  14. 实施质量保证和控制质量的区别
  15. 《2022中国企业数智化转型升级服务全景图/产业图谱1.0版》重磅发布
  16. shiro 过滤器 Filter 修改请求url
  17. 2013夏-一篇杂文
  18. 3.WebSocket编程—发送与接收JAVA对象
  19. Unity中让游戏对象消失或隐藏的几种方法
  20. 单向链表与双向链表的区别

热门文章

  1. 嵌入式软件工程师面试题汇总
  2. matlab-线性代数 创建 N阶数量矩阵 N阶单位矩阵 对角矩阵 范德蒙矩阵 等差数列...
  3. [移动应用]跨平台开发框架
  4. PostgreSQL报表统计历史12月度数据,无数据补零
  5. ABP官方文档(四十九)【集成EntityFramework】
  6. All Eyes on Docs! 练就火眼金睛,就来StarRocks 极客营
  7. VS程序不显示控制台
  8. 跟涛哥一起学嵌入式 16:设计一款CPU芯片到底有多难?
  9. Jupyter notebook 创建新笔记本出错
  10. html怎么搞一个微信图标,微信图标怎么点亮 两步搞定!