2012年(48)
分类: LINUX
2012-10-21 10:40:55
在进行Web开发时,可能遇到遇到以下几种需求:
l 希望某类或者某已知MIME 类型的文件(比如:*.gif;*.txt;*.htm)能够在访问时弹出“文件下载”对话框。
l 希望客户端下载时以指定文件名显示。
l 希望某文件直接在浏览器上显示而不是弹出文件下载对话框。
对于上面的需求,使用Content-Disposition属性就可以解决。下面是代码示例:
response.setHeader("Content-disposition", "attachment;filename=" + fileName)。
//Content-disposition为属性名。
//attachment表示以附件方式下载。如果要在页面中打开,则改为inline。
//filename如果为中文,则会出现乱码。解决办法有两种:
//1、使用fileName = new String(fileName.getBytes(), "ISO8859-1")语句
//2、使用fileName = HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)语句
atsivsucks2013-04-13 11:50:46
这样做在除了Chrome和IE浏览器之外会直接显示%编码的文件名,参考:
http://greenbytes.de/tech/tc2231/#attwithfnrawpctenca
符合标准的下载“中文.txt”应该是:
Content-Disposition: attachment; filename*=UTF-8''%E4%B8%AD%E6%96%87.txt
参考:
http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-http
可惜的是,IE8和以下不支持符合标准的做法,建议检测是否为IE8和以下是的话使用你现在这个做法。