浅谈MIME之文件下载

本文详细介绍了在Java Web中如何利用MIME类型进行文件下载,重点讨论了Content-Type和Content-Disposition头的作用。针对中文文件名出现的乱码问题,文章提出了解决方案,包括使用ISO8859-1编码和RFC1522标准,以及处理jsp编码问题。同时,还探讨了文件名中含有空格的处理方法。
摘要由CSDN通过智能技术生成

浅谈MIME之文件下载

要实现文件下载,我们只需要设置两个特殊的相应头。
它们是什么头?如果文件名带中文,该如何解决?

两个特殊的相应头:

Content-Type: application/octet-stream

它定义了数据的类型,以便数据能被适当的处理。有效的类型有:text,image,audio,video,applications,multipart和message。注意任何一个二进制附件都应该被叫做application/octet- stream。这个头的一些用例为:image/jpg, application/mswork,multipart/mixed,这只是很少的一部分。
分类大全参考网址:https://blog.csdn.net/weixin_43209201/article/details/86532261

Content-Disposition: attachment;filename=test.zip

一个试验性的头,它用于给客户程序/MUA提供提示,来决定是否在行内显示附件或作为单独的附件。当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型

例如:

response.setHeader("Content-Disposition","attachment;filename=test.jpg");
response.setContentType("image/jpeg");

注意:如果文件中filename参数中有中文,则就会出现乱码。

解决办法:

response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1"));
response.setContentType("application/ynd.ms-excel;charset=UTF-8");





测试并分析文件名乱码问题
response.setHeader()下载中文文件名乱码问题

response.setHeader("Content-Disposition", "attachment; filename=" + >java.net.URLEncoder.encode(fileName, "UTF-8"));

下载的程序里有了上面一句,一般在IE6的下载提示框上将正确显示文件的名字,无论是简体中文,还是日文。不过当时确实没有仔细测试文件名为很长的中文文件名的情况。现如今经过仔细测试,发现文字只要超过17个字,就不能下载了。分析如下:

一. 通过原来的方式,也就是先用URLEncoder编码,当中文文字超过17个时,IE6 无法下载文件。这是IE的bug,参见微软的知识库文章 KB816868 。原因可能是IE在处理 Response Header 的时候,对header的长度限制在150字节左右。而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以会报错。而且不跟后缀也 不对.
二. 解决方案:将文件名编码成ISO8859-1是有效的解决方案,代码如下:

response.setHeader( "Content-Disposition", "attachment;filename=" + new >String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值