一个关于文件下载的问题,很奇怪!!!

gavinwwl 2012-04-18 10:03:38
主要代码如下:

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重置了一下,还是不行。是代码有问题,还是客户端设置问题?要怎么弄?
...全文
142 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gavinwwl 2012-04-23
  • 打赏
  • 举报
回复
原因找到了,在IE7及之前的版里,对文件名长度有限制的,按字节算的,好像是120多个,后台编码后,IE会将过长的编码字符串自动截断,只保留后面的,所以前面的几个会出现%ad这样的情况。这个在msdn里有介绍,忘记地址了。
  • 打赏
  • 举报
回复
这个地方使用 UrlPathEncode?

应该是UrlEncode吧!这两个方法在内容中包含?号时输出结果是不同的。
传递正能量 2012-04-21
  • 打赏
  • 举报
回复
Response.TransmitFile(filePath);
换成别的
比如
Response.WriteFile(filePath);


另外测试直接下载中文文件,没有程序干预的情况,只能帮你想这么多了
gavinwwl 2012-04-19
  • 打赏
  • 举报
回复
还没有解决呀。。。。。。。
宝_爸 2012-04-18
  • 打赏
  • 举报
回复
感觉和客户端没有问题,不过我这边也发现一个很奇怪的问题

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

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

从下面的表里%ad好像¯
http://www.w3schools.com/TAGS/ref_urlencode.asp
gavinwwl 2012-04-18
  • 打赏
  • 举报
回复
我们系统要求支持IE6,7,8 暂时还没有测试IE9. 而且不可能要求用户去重装IE或者系统,只有我们先找到原因了再去告诉他。
orochiheart 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
另外我很欣赏楼主的结贴率
[/Quote]
+1
传递正能量 2012-04-18
  • 打赏
  • 举报
回复
另外我很欣赏楼主的结贴率
传递正能量 2012-04-18
  • 打赏
  • 举报
回复
如果就这唯一的客户端是这样,
先把它升成ie9,解决掉
然后再找问题,想办法

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧