下载带有Response.Write的文件时,文件名中的空格将替换为下划线,当关联的应用程序打开时,会附加方括号中的数字:
Response.AppendHeader("Content-disposition", "attachment; filename=this is the file.xml");
Response.Write(dr["InfopathDoc"]);
Run Code Online (Sandbox Code Playgroud)
这会在关联的应用程序中生成此文件名:
这个_is_ _文件[1] .xml
我如何摆脱下划线,为什么我得到[1]?
谢谢
在这里找到了解决这个问题的方法
要解决FF问题,请在文件名周围添加引号
Response.AddHeader("Content-Disposition","attachment; filename = \""+ filename +"\"");
对于IE,用'%20'替换空格
filename = toDownload.Name.Replace("","%20");
小智 5
网上有一些针对此类问题的解决方案。并非所有解决方案都适用于所有浏览器,但某些解决方案至少保证“保存结果”,尽管它们无法为所有客户端保留最初“建议的”文件名:
\n\n第一眼:
\n\n内容处置:附件;文件名=我的新文档.pdf;
\n\nFF36:显示下载文件“My”:-(\nIE6:显示“My New Document.pdf”,但打开时可能显示为“My New Document[1].pdf”。\nIE8:显示“My_New_Document.pdf”。 pdf”,但也可以将“[1]”附加为 IE6。\n注意:保存文档时,IE 会保留显示的名称,无论直接打开时向所选应用程序提供什么!
\n\n第一个改进:
\n\n内容处置:附件;filename="我的新文档.pdf";
\n\nFF36:按预期工作,即显示“我的新文档.pdf”。\nIE6+IE8:没有变化,就像以前一样。
\n\n第二个变化:
\n\n内容处置:附件;文件名=“我的%20New%20Document.pdf”;
\n\n(将空格替换为 %20,如 URL 编码中所示,并保留双引号。)
\n\nFF36:显示发回的内容,即“My%20New%20Document.pdf”。不太好。\nIE6+IE8:呈现“My New Document.pdf”,但分发“My%20New%20Document.pdf”。
\n\n第三种变化:
\n\n内容处置:附件;文件名=My%20New%20Document.pdf;
\n\n(删除双引号,但保留 %20。)
\n\nFF36:如上所述 - 不太好。\nIE6+IE8:如上所述 - 也不太好。
\n\n结论:
\n\n看来至少所提出的方法并不能永远解决问题:它们既没有涵盖一种浏览器的所有情况,也没有涵盖任何相同的选定情况的所有浏览器。
\n\n对我来说,最好的结果似乎是可以用双引号包围的:对于 FF36 和 IE6 有效,对于 IE8(可能还有 IE7),它至少与下划线保持稳定,即下载并保存渲染相同的文件名下载并打开,但“[1]”除外,我们无论如何都无法阻止。
\n\n最后的评论
\n\n有些人相信圣埃克苏普\xc3\xa9rys《小王子》中的小国王,他说,当皇帝要求根本不可能的事情时,他不能真正指望他的人民会跟随他,导致他命令太阳升起,当它自然发生时就设置。就像这位国王在他的小星球越来越加速旋转时遇到麻烦一样,这些人已经放弃了,只是在服务器端添加了下划线。:-)
\n\n但有关此主题的 RFC 以及浏览器实现者提供的内容有时很难克服。
\n小智 4
如果有人仍然感兴趣:
这种文件名重写仅由浏览器完成,正如您在使用适当的工具检查收到的 HTTP 响应时所看到的那样,与所使用的浏览器无关。IE 首先将请求的文件下载到其“Temporary Internet Files”文件夹系统中(这不仅仅是一个,但这是另一个主题),为此,该文件会收到一个新名称,与“Content-Disposition”最匹配来自 HTTP 响应的建议。但是,如果实际用于该文件的实际“Temporary Internet Files”文件夹中已存在同名文件,则其名称将通过括号中的序列号进行扩展,例如“[2]”。由于每个新的 HTTP 请求都会导致 IE 缓存机制重新计算实际的缓存文件夹,并且选择的下一个缓存文件夹可能尚未包含具有该名称的文件,因此该数字可能会在下次下载文件或资源时消失同名。
如果下载的文件存储在某处,通常会再次使用最初建议的文件名,具体取决于 IE 版本。某些版本和补丁级别似乎使用缓存文件夹文件名:-(
当浏览器将下载的文件分发给选定的或自动选择的应用程序时,这个问题开始变得烦人。在这种情况下,应用程序被调用直接从缓存中打开文件,这至少有两个原因是不好的:
(1) 文件名将是缓存文件夹中文件的名称,而不是建议的名称。这甚至可能会删除扩展名,这将使某些应用程序感到困惑,即使它们已被选择用于正确处理文件。
(2) 如果互联网新手用户下载并打开一个文件进行编辑,然后只需按应用程序的“保存”按钮,该文件就会简单地保存到 IE 缓存文件夹中,此类用户将永远找不到该文件再次。这些事情会让人们非常愤怒和绝望......
| 归档时间: |
|
| 查看次数: |
6411 次 |
| 最近记录: |