一、Content-type基本概念

HTTP协议提供了Content-Type实体首部字段来描述报文实体的媒体格式,说明请求或返回的消息是用什么格式进行编码的,在request header和response header里都有存在。 用来向服务器或者浏览器说明传输的文件格式,以便服务器和浏览器按照正确的格式进行解析。在最初的的http post请求只支持application/x-www-form-urlencoded,参数是通过浏览器的url进行传递,但此种方法不支持文件上传,所以后来Content-type 扩充了multipart/form-data类型以支持向服务器发送二进制数据,以及随着后面web应用的日益发展增加了application/json的类型

二、MIME类型说明:

  • 语法结构

Content-Type: [type]/[subtype];parameter

1、type 有下面的形式:

  • Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
  • Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
  • Application:用于传输应用程序数据或者二进制数据;
  • Message:用于包装一个E-mail消息;
  • Image:用于传输静态图片数据;
  • Audio:用于传输音频或者音声数据;
  • Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

2、subtype 用于指定 type的详细形式。“type/subtype”配对的集合和与此相关的参数。下面是最经常用到的一些 MIME 类型:

  • text/html(HTML 文档);
  • text/plain(纯文本);
  • text/css(CSS 样式表);
  • image/gif(GIF 图像);
  • image/jpeg(JPG 图像);
  • application/x-javascript(JavaScript 脚本);
  • application/x-shockwave-flash(Flash);
  • application/x- www-form-urlencoded(使用 HTTP 的 POST方法提交的表单);
  • multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)。

3、常用类型

类型 描述 典型示例
text 表明文件是普通文本,理论上是人类可读 text/plaintext/htmltext/css, text/javascript
image 表明是某种图像。不包括视频,但是动态图(比如动态gif)也使用image类型 image/gifimage/pngimage/jpegimage/bmpimage/webpimage/x-iconimage/vnd.microsoft.icon
audio 表明是某种音频文件 audio/midiaudio/mpeg, audio/webm, audio/ogg, audio/wav
video 表明是某种视频文件 video/webmvideo/ogg
application 表明是某种二进制数据

application/octet-streamapplication/pkcs12application/vnd.mspowerpointapplication/xhtml+xmlapplication/xml,  application/pdf

三、常见使用场景

1、提交表单

<form action="/FileUploadServlet"  method="POST"><input type="text" name="username"/><input type="password" name="password"/><input type="submit" value="Send"/>
</form>

当我们没有对其指定enctype值或者显示指定enctype="application/x-www-form-urlencoded"值时,Request报文的Content-Type字段值和请求实体如下:

#Content-Type首部字段.
Content-Type:application/x-www-form-urlencoded#请求实体内容.
username=CYanLong&password=123456

2、文件上传

multipart/form-data

multipart/form-data 可用于HTML表单从浏览器发送信息给服务器。作为多部分文档格式,它由边界线(一个由'--'开始的字符串)划分出的不同部分组成。每一部分有自己的实体,以及自己的 HTTP 请求头,Content-Disposition和 Content-Type 用于文件上传领域,最常用的 (Content-Length 因为边界线作为分隔符而被忽略)。

Content-Type: multipart/form-data; boundary=aBoundaryString
(other headers associated with the multipart document as a whole)--aBoundaryString
Content-Disposition: form-data; name="myFile"; filename="img.jpg"
Content-Type: image/jpeg(data)
--aBoundaryString
Content-Disposition: form-data; name="myField"(data)
--aBoundaryString
(more subparts)
--aBoundaryString--

如下所示的表单:

<form action="http://localhost:8000/" method="post" enctype="multipart/form-data"><input type="text" name="myTextField"><input type="checkbox" name="myCheckBox">Check</input><input type="file" name="myFile"><button>Send the file</button>
</form>

会发送这样的请求:

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------8721656041911415653955004498
Content-Length: 465-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myTextField"Test
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myCheckBox"on
-----------------------------8721656041911415653955004498
Content-Disposition: form-data; name="myFile"; filename="test.txt"
Content-Type: text/plainSimple file.
-----------------------------8721656041911415653955004498--

3、JSON数据格式传输 application/json

此类型告诉服务端数据是序列化的json字符串,由于json规范的流行和越来越多的浏览器支持原生JSON.stringfy,此类型也越来越多的被使用。
(最后发送到服务端的数据格式eg:"{'name':'黄晓明','age':'40'}")

四、例子

1、application/json例子

前段提交

$.ajax({url:"../../Notice/LoadForm.do",type:"post",contentType:"application/json;charset=UTF-8",data:JSON.stringify({"id":"1","title":"标题"})
});

后端接收(java-spring)

@RequestMapping(value="Notice/LoadForm")
@ResponseBody
public ResultJO loadForm(@RequestBody Notice notice){}

2、下载例子(java-spring)

@RequestMapping("/download")public void download(HttpServletRequest request, HttpServletResponse response){File file=new File("filenamepath.xls");String fileName=file.getName();String ext=fileName.substring(fileName.lastIndexOf(".")+1);//判断浏览器类型String agent=(String)request.getHeader("USER-AGENT"); try {if(agent!=null && agent.indexOf("Fireforx")!=-1) {//UTF-8编码,防止输出文件名乱码fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");   }else {fileName= URLEncoder.encode(fileName,"UTF-8");}} catch (UnsupportedEncodingException e) {e.printStackTrace();}BufferedInputStream bis=null;OutputStream os=null;response.reset();response.setCharacterEncoding("utf-8");if("doc".equals(ext)) {response.setContentType("application/msword"); }else if("pdf".equals(ext)) {response.setContentType("application/pdf"); }else if("xls".equals(ext)){response.setContentType("application/octet-stream;charset=ISO8859-1");}else if("filetype".equals(ext)){..............自行扩展}response.setHeader("Content-Disposition", "attachment; filename=" + fileName);try {bis=new BufferedInputStream(new FileInputStream(file));byte[] b=new byte[bis.available()+1000];int i=0;os = response.getOutputStream();  while((i=bis.read(b))!=-1) {os.write(b, 0, i);}os.flush();os.close();} catch (IOException e) {e.printStackTrace();}finally {if(os!=null) {try {os.close();} catch (IOException e) {e.printStackTrace();}}}}

五、问题收集

1、 在 IE6 IE7 IE8 中,若一个页面被打开时接收到的响应头的content-type 为text/plain,浏览器会尝试嗅探页面文件内实际内容来判断是否可能为一个 HTML 文档,若是则会以 text/html的方式将页面作为 HTML 文档解释,而不是将其作为纯文本内容处理。

解决办法:使用attachment

2、 jpg、tmp、png等格式图片没有办法用 windows 图片和传真查看器直接打开

解决办法:使用attachment

3、docx、pptx等Office2007格式文件可能会被浏览器错误识别为zip格式文件下载或打开

4、SpringMVC在使用JSON时报错信息为:Content type 'application/json;charset=UTF-8' not supported

直接原因是:我的(maven)项目parent父工程pom.xml缺少必要的三个jar包依赖坐标。

解决方法是:在web子模块的pom.xml里面添加springMVC使用JSON实现AJAX请求。

<!--spring mvc-json依赖--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.9</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.9</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.9</version></dependency>

六、Mime 类型列表

office 所有后缀对应的 content-type
类型/子类型 扩展名
application/msword .doc
application/msword .dot
application/vnd.openxmlformats-officedocument.wordprocessingml.document .docx
application/vnd.openxmlformats-officedocument.wordprocessingml.template .dotx
application/vnd.ms-word.document.macroEnabled.12 .docm
application/vnd.ms-word.template.macroEnabled.12 .dotm
application/vnd.ms-excel .xls
application/vnd.ms-excel .xlt
application/vnd.ms-excel .xla
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet .xlsx
application/vnd.openxmlformats-officedocument.spreadsheetml.template .xltx
application/vnd.ms-excel.sheet.macroEnabled.12 .xlsm
application/vnd.ms-excel.template.macroEnabled.12 .xltm
application/vnd.ms-excel.addin.macroEnabled.12 .xlam
application/vnd.ms-excel.sheet.binary.macroEnabled.12 .xlsb
application/vnd.ms-powerpoint .ppt
application/vnd.ms-powerpoint .pot
application/vnd.ms-powerpoint .pps
application/vnd.ms-powerpoint .ppa
application/vnd.openxmlformats-officedocument.presentationml.presentation .pptx
application/vnd.openxmlformats-officedocument.presentationml.template .potx
application/vnd.openxmlformats-officedocument.presentationml.slideshow .ppsx
application/vnd.ms-powerpoint.addin.macroEnabled.12 .ppam
application/vnd.ms-powerpoint.presentation.macroEnabled.12 .pptm
application/vnd.ms-powerpoint.presentation.macroEnabled.12 .potm
application/vnd.ms-powerpoint.slideshow.macroEnabled.12 .ppsm
其他后缀对应的 content-type
类型/子类型 扩展名
application/envoy evy
application/fractals fif
application/futuresplash spl
application/hta hta
application/internet-property-stream acx
application/mac-binhex40 hqx
application/msword doc
application/msword dot
application/octet-stream *
application/octet-stream bin
application/octet-stream class
application/octet-stream dms
application/octet-stream exe
application/octet-stream lha
application/octet-stream lzh
application/oda oda
application/olescript axs
application/pdf pdf
application/pics-rules prf
application/pkcs10 p10
application/pkix-crl crl
application/postscript ai
application/postscript eps
application/postscript ps
application/rtf rtf
application/set-payment-initiation setpay
application/set-registration-initiation setreg
application/vnd.ms-excel xla
application/vnd.ms-excel xlc
application/vnd.ms-excel xlm
application/vnd.ms-excel xls
application/vnd.ms-excel xlt
application/vnd.ms-excel xlw
application/vnd.ms-outlook msg
application/vnd.ms-pkicertstore sst
application/vnd.ms-pkiseccat cat
application/vnd.ms-pkistl stl
application/vnd.ms-powerpoint pot
application/vnd.ms-powerpoint pps
application/vnd.ms-powerpoint ppt
application/vnd.ms-project mpp
application/vnd.ms-works wcm
application/vnd.ms-works wdb
application/vnd.ms-works wks
application/vnd.ms-works wps
application/winhlp hlp
application/x-bcpio bcpio
application/x-cdf cdf
application/x-compress z
application/x-compressed tgz
application/x-cpio cpio
application/x-csh csh
application/x-director dcr
application/x-director dir
application/x-director dxr
application/x-dvi dvi
application/x-gtar gtar
application/x-gzip gz
application/x-hdf hdf
application/x-internet-signup ins
application/x-internet-signup isp
application/x-iphone iii
application/x-javascript js
application/x-latex latex
application/x-msaccess mdb
application/x-mscardfile crd
application/x-msclip clp
application/x-msdownload dll
application/x-msmediaview m13
application/x-msmediaview m14
application/x-msmediaview mvb
application/x-msmetafile wmf
application/x-msmoney mny
application/x-mspublisher pub
application/x-msschedule scd
application/x-msterminal trm
application/x-mswrite wri
application/x-netcdf cdf
application/x-netcdf nc
application/x-perfmon pma
application/x-perfmon pmc
application/x-perfmon pml
application/x-perfmon pmr
application/x-perfmon pmw
application/x-pkcs12 p12
application/x-pkcs12 pfx
application/x-pkcs7-certificates p7b
application/x-pkcs7-certificates spc
application/x-pkcs7-certreqresp p7r
application/x-pkcs7-mime p7c
application/x-pkcs7-mime p7m
application/x-pkcs7-signature p7s
application/x-sh sh
application/x-shar shar
application/x-shockwave-flash swf
application/x-stuffit sit
application/x-sv4cpio sv4cpio
application/x-sv4crc sv4crc
application/x-tar tar
application/x-tcl tcl
application/x-tex tex
application/x-texinfo texi
application/x-texinfo texinfo
application/x-troff roff
application/x-troff t
application/x-troff tr
application/x-troff-man man
application/x-troff-me me
application/x-troff-ms ms
application/x-ustar ustar
application/x-wais-source src
application/x-x509-ca-cert cer
application/x-x509-ca-cert crt
application/x-x509-ca-cert der
application/ynd.ms-pkipko pko
application/zip zip
audio/basic au
audio/basic snd
audio/mid mid
audio/mid rmi
audio/mpeg mp3
audio/x-aiff aif
audio/x-aiff aifc
audio/x-aiff aiff
audio/x-mpegurl m3u
audio/x-pn-realaudio ra
audio/x-pn-realaudio ram
audio/x-wav wav
image/bmp bmp
image/cis-cod cod
image/gif gif
image/ief ief
image/jpeg jpe
image/jpeg jpeg
image/jpeg jpg
image/pipeg jfif
image/svg+xml svg
image/tiff tif
image/tiff tiff
image/x-cmu-raster ras
image/x-cmx cmx
image/x-icon ico
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-graymap pgm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
message/rfc822 mht
message/rfc822 mhtml
message/rfc822 nws
text/css css
text/h323 323
text/html htm
text/html html
text/html stm
text/iuls uls
text/plain bas
text/plain c
text/plain h
text/plain txt
text/richtext rtx
text/scriptlet sct
text/tab-separated-values tsv
text/webviewhtml htt
text/x-component htc
text/x-setext etx
text/x-vcard vcf
video/mpeg mp2
video/mpeg mpa
video/mpeg mpe
video/mpeg mpeg
video/mpeg mpg
video/mpeg mpv2
video/quicktime mov
video/quicktime qt
video/x-la-asf lsf
video/x-la-asf lsx
video/x-ms-asf asf
video/x-ms-asf asr
video/x-ms-asf asx
video/x-msvideo avi
video/x-sgi-movie movie
x-world/x-vrml flr
x-world/x-vrml vrml
x-world/x-vrml wrl
x-world/x-vrml wrz
x-world/x-vrml xaf
x-world/x-vrml xof

文章内容来源:
https://www.w3school.com.cn/media/media_mimeref.asp 
https://www.cnblogs.com/cyanlong/p/5726793.html
https://www.jianshu.com/p/4b09c260f9b2
https://blog.csdn.net/u013749540/article/details/78195266
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types
http://www.mamicode.com/info-detail-2785469.html

文件上传下载 Content-type 设置整理相关推荐

  1. struts2教程--实现文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  2. struts2教程(8)--文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  3. spring boot基础教程之文件上传下载

    一文件上传 文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个文件上传表单页面; (4)编写controller; ( ...

  4. servlet文件上传下载_Servlet上传文件和下载文件示例

    servlet文件上传下载 Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例 ...

  5. springboot文件上传下载实战 —— 登录功能、展示所有文件

    springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...

  6. SB_5_瑞吉外卖_4_文件上传下载_菜品新增_菜品分页查询_菜品修改

    瑞吉外卖-Day04 课程内容 文件上传下载 菜品新增 菜品分页查询 菜品修改 1. 文件上传下载 1.1 上传介绍 1.1.1 概述 文件上传,也称为upload,是指将本地图片.视频.音频等文件上 ...

  7. springboot:实现文件上传下载实时进度条功能【附带源码】

    0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...

  8. aws php 上传文件 限制大小_php如何实现文件上传下载-PHP问题

    php实现文件上传下载的方法:首先创建好表单页面:然后将客户端文件上传到服务器端:最后将服务器端的文件移动到指定目录即可. 推荐:<PHP视频教程> PHP实现文件上传与下载 一.上传原理 ...

  9. 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享

    基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...

  10. C#实现文件上传下载

    本文属于个人原创作品.个人总结,谢绝转载.抄袭.如果您有疑问或者希望沟通交流,可以联系QQ:865562060. 一.文件上传 1.aspx页面使用file选择文件 <label>选择文件 ...

最新文章

  1. ngrok 内网穿透
  2. 教学一体机属于计算机的什么应用,教学一体机可以投屏吗
  3. 深入理解abstract class和interface
  4. 03_03 bash特性详解(下)
  5. java jce 授权_【Java加密】(一)JCE配置加密算法强度不受限授权的安装
  6. 集成开放平台标准化连接器之基于OAS3.0的API管理能力
  7. CSS3中的透明属性opacity的用法实例
  8. v380怎么设置云存储_计算机网络云计算技术在应用中的不足及缺陷
  9. 我一个普通程序员,光靠GitHub打赏就年入70万,其实你也可以
  10. SQLite查询优化(转)
  11. python:删除DataFrame中某列值为NaN的记录/行
  12. Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
  13. python爬虫面试真题及答案_Python面试题爬虫篇(附答案)
  14. 病毒分析与防护实验3—— 反汇编工具(Ollydbg)的使用
  15. Office软件Android无法登录,office mobile(安卓版)无法使用
  16. 运营管理模型对计算机软件,生产与运作管理
  17. 平面设计分析之图形创意解析
  18. GVINS / VINS-mono运行报错:undefined symbol: _ZN6google21kLogSiteUninitializedE,重新安装ceres可以解决
  19. MGC TOKEN—必将超越PlusToken的搬砖套利项目!
  20. 晾衣服,西北大学集训队选拔赛(重现赛)

热门文章

  1. Python 爬虫复习之爬取笔趣阁小说网站(不用正则)
  2. perl数组硬引用_Perl基础 Perl引用和数组用法解析
  3. wait获取子进程退出状态 WIFEXITED和WIFSIGNALED用法
  4. 如何在Safari Mac中启用暗黑模式?
  5. 3D 建模软件:3Dmax2024 中文激活版
  6. java的finally_Java的finally理解
  7. CSS3 —— 选择器(带你深入了解 CSS3 选择器)
  8. Mac OS 命令行修改IP地址
  9. flowable工作流的使用
  10. 计算机loopback地址怎么查,loopback地址_锐捷设备常用配置命令_loopback 0是什么意思...