关于下载文件时长文件名的问题.如何修改HttpResponseHeaders的编码

sclc_2008 2009-12-31 05:23:57
情况跟这个 http://topic.csdn.net/t/20060414/19/4687886.html 一样的
以前的一个系统出了一个小问题.
有一个文件下载页面: filedownload.aspx?id=15
通过传入的id来下载文件,基本代码如下:
this.Response.Clear();
int id = this.GetInt32ByQueryStr("fileid");
// 获取文件基本信息包括路径和文件名
UploadFileInfo fileinfo = UploadFileBLL.GetInfoByID(id);
// 得到文件的本地路径
string filepath = Request.MapPath(fileinfo.LocalPath + fileinfo.Name);
// 问题在这里.
Response.AppendHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", Server.UrlPathEncode(fileinfo.Name)));
this.Response.WriteFile(filepath);
this.Response.End();


我通过在HttpHeaders里加"Content attachment;filename=文件名"这种方式来显示文件名.
这样用户打开是就会显示一个包含下载文件名的对话框.保存时也会按这个文件名进行保存.
我使用了UrlPathEncode来进行编码,这样一个中文就被编码成了9个字节,如:"中" 被编码为 "%e4%b8%ad".
返回到客户端的应该是这种样式:

Content-Disposition: attachment;filename="%e4%b8%ad%e5%9b%bd%e7%bd%91%e9%80%9a%e5%85%b3%e4%ba%8e%e8%b0%83%e6%95%b4%e9%83%a8%e5%88%86%e7%94%b5%e4%bf%a1%e4%b8%9a%e5%8a%a1%e8%b5%84.doc"

问题是filename的长度限制是150个byte.见:http://support.microsoft.com/default.aspx?kbid=816868,所以当文件名被编码以后的长度大于150时.文件名被从前面截掉了一部分.
最多只能显示15个汉字再加扩展名(4byte).

可是如果不使用utf-8对文件名进行编码,直接返回gb2312编码的文件名也是可以在客户端正常显示的.
类似于这样:
Content-Disposition: attachment;filename="中国移动关于调整北京市动感地带话费标准的通知.doc"
在客户端上也是可以正常显示的文件下载对话框的.

问题是如何让这句话使用gb2312编码呢??
我只找到了AppendHeader这个方法能修改Header.还有其他方法可以修改Header么?
...全文
193 6 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sclc_2008 2011-01-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sclc_2008 的回复:]
你测试的是doc,你换一下用xls的。用xls的话是不行的
[/Quote]
有关系的,doc和xls的允许的文件名长度最大是不相同的
sundotLei 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sclc_2008 的回复:]
你测试的是doc,你换一下用xls的。用xls的话是不行的
[/Quote]

一样,没问题,这跟doc与xls没关系吧
sclc_2008 2010-01-04
  • 打赏
  • 举报
回复
你测试的是doc,你换一下用xls的。用xls的话是不行的
sundotLei 2010-01-01
  • 打赏
  • 举报
回复
貌似没问题,我这里测试完全可以显示正确文件名

Response.AppendHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", Server.UrlEncode("中国移动关于调整北京市动感地带话费标准的通知.doc")));
如果不行你可以设置下Response.HeaderEncoding的值
sclc_2008 2009-12-31
  • 打赏
  • 举报
回复
拜求高手!
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2009-12-31 05:23
社区公告
暂无公告