日期:2014-05-18  浏览次数:20986 次

一个关于文件下载的问题,很奇怪!!!
主要代码如下:
C# code

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + Context.Server.UrlPathEncode(fileName));
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.TransmitFile(filePath);
Response.Flush();
Response.End();


现在有一个文件,名称为:DE102211 S系列中低端交换机XXXXXXXXXXXX ISSUE 1.00.docx
XXX部分全部是中文字,XXX部分没有空格或其它特殊字符

在一台客户端下载(目前发现只有这一台,服务器和客户端不在同一个省份),
文件名变成了:%ad低端交换机XXXXXXXXXXXX ISSUE 1.00.docx
但是在其它电脑上都正常。
客户端配置是XP系统,IE8浏览器。

经过调试,发现可能是由于客户端把经过Context.Server.UrlPathEncode(fileName)编码的文件名,前面一部分截断了(这里必须经过编码,文件名可能含有各国文字及字符),导致这种情况。

但是为什么会这样呢?把客户端IE重置了一下,还是不行。是代码有问题,还是客户端设置问题?要怎么弄?

------解决方案--------------------
如果就这唯一的客户端是这样,
先把它升成ie9,解决掉
然后再找问题,想办法
------解决方案--------------------
另外我很欣赏楼主的结贴率
------解决方案--------------------
探讨
另外我很欣赏楼主的结贴率

------解决方案--------------------
感觉和客户端没有问题,不过我这边也发现一个很奇怪的问题

Server.MapPath("~"), 不同的客户端返回的值大小写是不同的
改成Server.MapPath("") 就一样了。

lz可能碰到同样的问题了。

从下面的表里%ad好像¯
http://www.w3schools.com/TAGS/ref_urlencode.asp
------解决方案--------------------
Response.TransmitFile(filePath);
换成别的
比如
Response.WriteFile(filePath);


另外测试直接下载中文文件,没有程序干预的情况,只能帮你想这么多了
------解决方案--------------------
这个地方使用 UrlPathEncode?

应该是UrlEncode吧!这两个方法在内容中包含?号时输出结果是不同的。