UC浏览器android端遇到文件名重复的问题
HttpHeader header = new HttpHeader();
header.add("Content-Disposition","attachment;filename=name;filename*=utf-8''" + name)
上述代码是为了解决中文乱码的问题,但没想到导致了UC浏览器的下载文件名问题,这里解决这个问题,只需要去掉;filename*=utf-8''" + name即可,UC浏览器无需此判断
中文名过长导致文件名乱码或者文件名被截取的问题
这是因为在获取文件名的时候,是通过UrlEncode.encode("utf-8")进行编码的,一个中文对应9个字节,而在某些浏览器中对于文件名的字符长度有限制,此时就不能通过utf-8进行。
String fileName = new String(name.getBytes("gb2312"),Charset.forName("iso88591"))
这里我们可以通过将中文通过gb2312编码,并最终通过浏览器默认的iso88591进行输出,众所周知,iso88591编码包含了gb2312编码,而在gb2312编码中,一个汉字占两个字节,所以最多可以有155/2=77个汉字大多数情况下,满足我们的需求。
safari浏览器默认打开没有下载
HttpHeader header = new HttpHeader();
header.add("content-type","application/octet-stream")
在设置Content-Type为特定的时候,会导致safari浏览器默认下载,这里对ContentType设置为application/octet-stream.
百度浏览器下载文件后缀名为.*
原因,百度浏览器不支持Content-Type为application/octet-stream,对于特定格式的文件需要指定特定的Content-Type