Java基础——response.setContentType(...)与response.addHeader(...)或setHeader(...)

在Java开发下载功能时,我们都会看到以下这两句代码或类似这两句代码的代码:

response.setContentType("application/x-msdownload");//三大主流浏览器(IE、Firefox、Google )

response.setContentType("application/octet- stream");//除了三大浏览器再加上Mac的Safari

response.addHeader("Content-Disposition", "attachment; filename=" + new String(filename.getBytes("GBK"), "ISO8859-1"));使用该段代码时,Mac系统上火狐或Safari等浏览器下载的文件名或内容可能会乱码,那就使用以下终极编码方式

response.setHeader( "Content-Disposition", "attachment; filename="+ new String(fn.getBytes("UTF-8"), "ISO-8859-1") );

以下就这两句代码作用做简要阐述:

response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据;

Content-Type:它定义了数据的类型,以便数据能被适当的处理。有效的类型有:text,image,audio,video,applications,multipart和message。注意任何一个二进制附件都应该被叫做application/octet- stream

response.addHeader(),"Content-Disposition":MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。当 Internet Explorer 接收到头时,它会激活文件下载对话框,它的文件名框自动填充了头中指定的文件名,就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名,如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment;filename 必须保留扩展名部分(xxx.doc), 文件名中的中文才能正确解码, 否则可能不识别%20(空格), 甚至在ie6下全部都是未解码的格式(%xx)。new String(filename.getBytes("GBK"), "ISO8859-1"))new String(filename.getBytes("UTF-8"), "ISO8859-1")),避免下载的文件名乱码。

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。详见百度MIME!

response.addHeader()response.setHeader():可能在我们使用的时候,用起来感觉都一样,都能达到想要的效果,但它们本质上却是不一样的:

setHeader(name, value):如果Header中没有定义则添加,如果已定义则用新的value覆盖原用value值。

addHeader(name, value):如果Header中没有定义则添加,如果已定义则保持原有value不改变。

注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ddm01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值