介绍

  • 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的使用

  1. consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;consumes="application/json"表示方法仅处理Content-Type为“application/json”类型的请求
  2. produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回,produces="application/json"表示处理request请求中Accept头中包含了"application/json"的请求,也就是暗示返回的文件类型为application/json
  3. headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求 headers = "Accept=application/json"表示方法仅处理请求头中有Accept=application/json的请求
  4. 基于headers, consumes,produces对请求和响应中的媒体内容格式做控制和过滤

HttpServletResponse关于Content-Type的使用

  1. response.setContentType的意思就是高速客户端在解析这个返回包的时候用的是哪种解析方式
  2. 客户端根据多媒体类型,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据
  3. 下载或预览文件,常和报文头content-disposition配合使用,对报文体进行描述,规定了接收端的显示处理行为,此报文头的值有两种, attachmentinline, 分别表示保存 还是 直接显示。

下载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详解相关推荐

  1. JSP中meta标签之详解

    JSP中meta标签之详解 2013年01月26日 16:09:27 阅读数:5589 JSP标签 <meta.....>作用总结 <metahttp-equiv="pra ...

  2. Android中的四大组件详解

    Android中的四大组件详解 我们都知道Android系统应用层框架中,为开发者提供了四大组件来便于应用的开发,它们是Activity.Service.BroadcastReceiver.Conte ...

  3. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  4. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  5. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

  6. python爬虫多线程是什么意思_python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

  7. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

  8. python中new方法详解及_Python中new方法的详解

    new_ 方法是什么? __new__方法其实就是创建对象的方法 new()方法是在类准备将自身实例化时调用. 一个类可以有多个位置参数和多个命名参数,而在实例化开始之后,在调用 init()方法之前 ...

  9. python中的super用法详解_Python中super函数用法实例分析

    本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...

  10. WPF中的鼠标事件详解

    WPF中的鼠标事件详解 Uielement和ContentElement都定义了十个以Mouse开头的事件,8个以PreviewMouse开头的事件,MouseMove,PreviewMouseMov ...

最新文章

  1. Java中float类型精度问题
  2. 【原】winform高效导出Excel带格式设置
  3. (转)CDN是如何工作的?
  4. Kafka系列之-Kafka监控工具KafkaOffsetMonitor配置及使用
  5. MySQL对浮点数设置保留位数
  6. 敏感词的字典树匹配(lua版)
  7. html怎么设置页脚注释,Word写论文时怎么插入页脚注释?
  8. 以太坊智能合约项目开发——Web3.py库安装及错误解决方案
  9. Java企业级常见的设计模式
  10. java使用poi导出Excel表发回浏览器或是保存到本地
  11. 带你了解SN74LVC245ADWR
  12. 乐视清空酷派股份;B站将于2018年赴美上市;苹果关闭所有iPhone降级通道丨价值早报
  13. mysql使用max函数+将类似123的字符型数据转换成数据类型
  14. 个推推送Android问题检测
  15. 微软为Office套件开发出语音听写软件
  16. pandas python2.3版本_应该学习最新版本的 Python 3 还是旧版本的 Python 2?
  17. 关于人脸识别,一篇很好的文章
  18. java多线程嵌套_Java多线程进阶
  19. 超声波测距+OLED显示
  20. 我跪了!OpenAI 发布 DALL·E 2,AI 化身「现实主义画师」,有详细论文

热门文章

  1. springmvc框架后台Date类型字段接收数据
  2. 数据可视化(三):如何选择图表(【对比型数据】和【分布型数据】)——学习笔记
  3. Python 正则替换字符串
  4. SaaS系统:做难有意思的事
  5. 四川大学 opencv 人脸识别 手势识别 研究项目
  6. EditPlus汉化版安装软件
  7. 东华计算机学院夏令营,东华大学计算机科学与技术学院(专业学位)软件工程保研夏令营...
  8. AEJoy—— 使用 JS 脚本创建预合成(四)
  9. 一流的技术员工究竟有多值钱?让扎克伯格告诉你
  10. Faiss PQ乘积量化的学习总结