文件上传下载 Content-type 设置整理
一、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/plain , text/html , text/css, text/javascript
|
image
|
表明是某种图像。不包括视频,但是动态图(比如动态gif)也使用image类型 |
image/gif , image/png , image/jpeg , image/bmp , image/webp , image/x-icon , image/vnd.microsoft.icon
|
audio
|
表明是某种音频文件 |
audio/midi , audio/mpeg, audio/webm, audio/ogg, audio/wav
|
video
|
表明是某种视频文件 |
video/webm , video/ogg
|
application
|
表明是某种二进制数据 |
|
三、常见使用场景
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 | |
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 设置整理相关推荐
- struts2教程--实现文件上传下载
Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...
- struts2教程(8)--文件上传下载
Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...
- spring boot基础教程之文件上传下载
一文件上传 文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个文件上传表单页面; (4)编写controller; ( ...
- servlet文件上传下载_Servlet上传文件和下载文件示例
servlet文件上传下载 Java Web应用程序中的文件上载和下载以及常见任务. 由于最近我写了很多有关Java servlet的文章 ,因此我想提供一个使用servlet上传和下载文件的示例示例 ...
- springboot文件上传下载实战 —— 登录功能、展示所有文件
springboot文件上传下载实战 创建项目 pom.xml 数据库建表与环境准备 建表SQL 配置文件 application.properties 整体架构 前端页面 登录页面 login.ht ...
- SB_5_瑞吉外卖_4_文件上传下载_菜品新增_菜品分页查询_菜品修改
瑞吉外卖-Day04 课程内容 文件上传下载 菜品新增 菜品分页查询 菜品修改 1. 文件上传下载 1.1 上传介绍 1.1.1 概述 文件上传,也称为upload,是指将本地图片.视频.音频等文件上 ...
- springboot:实现文件上传下载实时进度条功能【附带源码】
0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度.奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之. 近来偶然想到这个 ...
- aws php 上传文件 限制大小_php如何实现文件上传下载-PHP问题
php实现文件上传下载的方法:首先创建好表单页面:然后将客户端文件上传到服务器端:最后将服务器端的文件移动到指定目录即可. 推荐:<PHP视频教程> PHP实现文件上传与下载 一.上传原理 ...
- 基于华为云obs实现文件上传下载(技术栈mysql+springboot+Maven+jsp+java)的技术分享
基于华为云obs实现文件上传下载(技术栈mysql+springboot+jsp+java)的技术分享 obs实现文件上传下载 前言 一.OBS是什么? 二.使用步骤 1.1 前期准备 2 工具的内容 ...
- C#实现文件上传下载
本文属于个人原创作品.个人总结,谢绝转载.抄袭.如果您有疑问或者希望沟通交流,可以联系QQ:865562060. 一.文件上传 1.aspx页面使用file选择文件 <label>选择文件 ...
最新文章
- ngrok 内网穿透
- 教学一体机属于计算机的什么应用,教学一体机可以投屏吗
- 深入理解abstract class和interface
- 03_03 bash特性详解(下)
- java jce 授权_【Java加密】(一)JCE配置加密算法强度不受限授权的安装
- 集成开放平台标准化连接器之基于OAS3.0的API管理能力
- CSS3中的透明属性opacity的用法实例
- v380怎么设置云存储_计算机网络云计算技术在应用中的不足及缺陷
- 我一个普通程序员,光靠GitHub打赏就年入70万,其实你也可以
- SQLite查询优化(转)
- python:删除DataFrame中某列值为NaN的记录/行
- Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
- python爬虫面试真题及答案_Python面试题爬虫篇(附答案)
- 病毒分析与防护实验3—— 反汇编工具(Ollydbg)的使用
- Office软件Android无法登录,office mobile(安卓版)无法使用
- 运营管理模型对计算机软件,生产与运作管理
- 平面设计分析之图形创意解析
- GVINS / VINS-mono运行报错:undefined symbol: _ZN6google21kLogSiteUninitializedE,重新安装ceres可以解决
- MGC TOKEN—必将超越PlusToken的搬砖套利项目!
- 晾衣服,西北大学集训队选拔赛(重现赛)
热门文章
- Python 爬虫复习之爬取笔趣阁小说网站(不用正则)
- perl数组硬引用_Perl基础 Perl引用和数组用法解析
- wait获取子进程退出状态 WIFEXITED和WIFSIGNALED用法
- 如何在Safari Mac中启用暗黑模式?
- 3D 建模软件:3Dmax2024 中文激活版
- java的finally_Java的finally理解
- CSS3 —— 选择器(带你深入了解 CSS3 选择器)
- Mac OS 命令行修改IP地址
- flowable工作流的使用
- 计算机loopback地址怎么查,loopback地址_锐捷设备常用配置命令_loopback 0是什么意思...