日期:2014-05-17  浏览次数:20438 次

下载文件时的重命名问题(截断或乱码)
在下载文件时,使用的是ID+Name的存储方式
跟踪断点,文件名没有出现乱码


Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName) + "\"");


使用这一句,对于超过17个汉字的文件名,就会被截断(还好,只是把前面的部分给抛弃了,扩展名还在)
但是对于很多管理公文这样的系统,长文件名那肯定是特别常见的(关于开展庆祝建党90周年暨首届XXXX市党建先进十大人物评选活动的通知.doc)


搜索了资料,这个问题很普遍,有解决方案建议强制使用gb2312编码,

Encoding code = Encoding.GetEncoding("gb2312");
Response.ContentEncoding = code;
Response.HeaderEncoding = code;//这句很重要


但是我遇到以下两种情况:
1)

Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");

这样用的话,得到的文件名根本不对,扩展名没有了,而且整个文件很短(比如CABYSCW.)

2)

Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName, code)+ "\"");

这样的话,得到的文件名出现了中文乱码
5?90?ж??????.doc


已经在Web.config文件中声明
<globalization requestEncoding= "gb2312" responseEncoding= "gb2312" />
并在这个DownloadAttach.aspx页面中添加
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 

下载还是不对

请问各位是如何解决的?

------解决方案--------------------
考虑重命名文件吧= =
或者在下载前,加上一个方法,先让原文件名存到系统剪切板里
------解决方案--------------------
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName) + "\"");

的上一句怎么写的

如果是string filename=System.Web.HttpUtility.UrlEncode(Encoding.UTF8.GetBytes(fileName)); 

改成string filename=System.Web.HttpUtility.UrlEncode(Encoding.Default.GetBytes(fileName));

参考
------解决方案--------------------
关注一下 我也遇到相同的情况

------解决方案--------------------
引用:
引用:
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode(fileName) + "\"");

的上一句怎么写的