http中的Content-Type详解
介绍
- MediaType,即是Internet Media Type,互联网媒体类型;也叫做MIME类型
- 在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
- response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据。
媒体格式类型
Content-Type | 媒体格式 |
---|---|
text/html | HTML,HTM格式 |
text/plain | 纯文本格式 |
text/xml | XML格式 |
image/gif | gif图片格式 |
image/jpeg | jpg,jpeg,jpe图片格式 |
image/png | png图片格式 |
application/xhtml+xml | XHTML格式 |
application/xml | XML数据格式 |
application/atom+xml | Atom XML聚合格式 |
application/json | JSON数据格式,由于json规范的流行,各大浏览器都开始原生支持JSON.stringfy。而且spring对这个content-Type上传的数据有很好的支持,可以直接通过@RequestBody进行接收。也是当前完美适配当前流行的RestApi。 |
application/pdf | pdf格式 |
application/msword | Word文档格式 |
application/vnd.ms-excel | excel格式 |
application/vnd.ms-powerpoint | ppt格式 |
application/octet-stream | 二进制流数据(如常见的文件下载,不知道下载文件类型) |
application/x-www-form-urlencoded | 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式) |
multipart/form-data | 需要在表单中进行文件上传时,就需要使用该格式 |
application/binary | 二进制 |
@RequestMapping关于Content-Type的使用
- consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;consumes="application/json"表示方法仅处理Content-Type为“application/json”类型的请求
- produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回,produces="application/json"表示处理request请求中Accept头中包含了"application/json"的请求,也就是暗示返回的文件类型为application/json
- headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求 headers = "Accept=application/json"表示方法仅处理请求头中有Accept=application/json的请求
- 基于headers, consumes,produces对请求和响应中的媒体内容格式做控制和过滤
HttpServletResponse关于Content-Type的使用
- response.setContentType的意思就是高速客户端在解析这个返回包的时候用的是哪种解析方式
- 客户端根据多媒体类型,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据
- 下载或预览文件,常和报文头content-disposition配合使用,对报文体进行描述,规定了接收端的显示处理行为,此报文头的值有两种,
attachment
和inline
, 分别表示保存 还是 直接显示。
下载excel文件
private void setWorkbookResponse(Workbook workbook, HttpServletResponse response) throws Exception {if (workbook != null) {ServletOutputStream out = null;try {String fileName = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls";String headStr = "attachment; filename=\"" + fileName + "\"";response.setContentType("application/vnd.ms-excel");response.setHeader("Content-Disposition", headStr);out = response.getOutputStream();workbook.write(out);out.flush();} catch (IOException var16) {} finally {if (null != out) {out.close();}}}
}
预览html文件
private void setWorkbookResponseToHTML(Workbook workbook, HttpServletResponse response) throws Exception {if (workbook != null) {ServletOutputStream out = null;//03 版本EXCEL预览 .xls 有图片ExcelToHtmlParams params = new ExcelToHtmlParams(workbook,true,"yes");try {String fileName = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".html";//String headStr = "attachment; filename=\"" + fileName + "\"";String headStr = "inline; filename=\"" + fileName + "\"";response.setContentType("text/html");response.setHeader("Content-Disposition", headStr);out = response.getOutputStream();out.write(ExcelXorHtmlUtil.excelToHtml(params).getBytes());out.flush();} catch (IOException var16) {} finally {if (null != out) {out.close();}}}
}
二进制格式
private void setWorkbookResponseWithBinary(Workbook workbook, HttpServletResponse response) {if (workbook != null) {BufferedInputStream bis = null;BufferedOutputStream bos = null;try {ServletOutputStream out = null;ByteArrayOutputStream os = new ByteArrayOutputStream();workbook.write(os);byte[] content = os.toByteArray();InputStream is = new ByteArrayInputStream(content);// 设置response参数,可以打开下载页面response.reset();response.setContentType("application/binary;charset=UTF-8");String fileName = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls";response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Credentials", "*");response.setHeader("Access-Control-Allow-Methods", "POST");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "*");out = response.getOutputStream();bis = new BufferedInputStream(is);bos = new BufferedOutputStream(out);byte[] buff = new byte[2048];int bytesRead;while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}}catch (IOException e) {e.printStackTrace();} finally {try {if (bis != null) {bis.close();}if (bos != null) {bos.close();}} catch (IOException e) {}}}
}
http中的Content-Type详解相关推荐
- JSP中meta标签之详解
JSP中meta标签之详解 2013年01月26日 16:09:27 阅读数:5589 JSP标签 <meta.....>作用总结 <metahttp-equiv="pra ...
- Android中的四大组件详解
Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- java中Freemarker list指令详解
java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...
- Python中的高级数据结构详解
这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...
- python爬虫多线程是什么意思_python爬虫中多线程的使用详解
queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...
- python中的super用法详解_【Python】【类】super用法详解
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...
- python中new方法详解及_Python中new方法的详解
new_ 方法是什么? __new__方法其实就是创建对象的方法 new()方法是在类准备将自身实例化时调用. 一个类可以有多个位置参数和多个命名参数,而在实例化开始之后,在调用 init()方法之前 ...
- python中的super用法详解_Python中super函数用法实例分析
本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...
- WPF中的鼠标事件详解
WPF中的鼠标事件详解 Uielement和ContentElement都定义了十个以Mouse开头的事件,8个以PreviewMouse开头的事件,MouseMove,PreviewMouseMov ...
最新文章
- Java中float类型精度问题
- 【原】winform高效导出Excel带格式设置
- (转)CDN是如何工作的?
- Kafka系列之-Kafka监控工具KafkaOffsetMonitor配置及使用
- MySQL对浮点数设置保留位数
- 敏感词的字典树匹配(lua版)
- html怎么设置页脚注释,Word写论文时怎么插入页脚注释?
- 以太坊智能合约项目开发——Web3.py库安装及错误解决方案
- Java企业级常见的设计模式
- java使用poi导出Excel表发回浏览器或是保存到本地
- 带你了解SN74LVC245ADWR
- 乐视清空酷派股份;B站将于2018年赴美上市;苹果关闭所有iPhone降级通道丨价值早报
- mysql使用max函数+将类似123的字符型数据转换成数据类型
- 个推推送Android问题检测
- 微软为Office套件开发出语音听写软件
- pandas python2.3版本_应该学习最新版本的 Python 3 还是旧版本的 Python 2?
- 关于人脸识别,一篇很好的文章
- java多线程嵌套_Java多线程进阶
- 超声波测距+OLED显示
- 我跪了!OpenAI 发布 DALL·E 2,AI 化身「现实主义画师」,有详细论文