Tip: Asp.net下载默认文件名里包含空格时,如何防止FireFox只截取空格前一部分作为文件名

以前写过一个Post:Tip:如何指定浏览器下载并保存动态生成的数据时对话框里的默认文件名,但是如果指定的文件名里包含了空格,FireFox就会截取空格前的部分作为默认文件名.
解决方法很简单:用双引号把文件名括起来:
                Response.AppendHeader("Content-Disposition""attachment; filename=\"" + fileName + "\"");
                Response.ContentType 
= "application/octet-stream";

不过还是有一个问题没解决,在IE中,如果文件名包含两个英文名点(period, 字符'.')的话,它会在第一个点前自动加个"[1]",于是你原来的文件名"aaa.bbb.whatever"就变成了"aaa[1].bbb.whatever". 哪位知道怎么解决这个问题,给大家分享一下?

--------
Update: 根据微软的说明,第二个问题根本就无法解决。
我说,大家一起劝用户们扔掉IE吧!

--------
Update:
第二个问题可以这样解决:
                if (Request.Browser.Browser.Contains("IE"))
                {
                    
string ext = fileName.Substring(fileName.LastIndexOf('.'));
                    
string name = fileName.Remove(fileName.Length - ext.Length);
                    name 
= name.Replace(".""%2e");
                    fileName 
= name + ext;
                }
                Response.AppendHeader(
"Content-Disposition""attachment; filename=\"" + fileName + "\"");
                Response.ContentType 
= "application/octet-stream";


posted on   deerchao  阅读(1808)  评论(2编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2007年10月 >
30 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 1 2 3
4 5 6 7 8 9 10

统计

点击右上角即可分享
微信分享提示