HttpResponse用下划线代替文件名中的空格

Gra*_*eme 5 response.write

下载带有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]?

谢谢

Yas*_*ari 6

在这里找到了解决这个问题的方法

http://dotnetslackers.com/Community/blogs/kaushalparik/archive/2009/05/06/file-download-problem-filename-with-spaces-truncated-in-ff-and-replaced-by-underscore-in- ie.aspx

要解决FF问题,请在文件名周围添加引号

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

对于IE,用'%20'替换空格

filename = toDownload.Name.Replace("","%20");


小智 5

网上有一些针对此类问题的解决方案。并非所有解决方案都适用于所有浏览器,但某些解决方案至少保证“保存结果”,尽管它们无法为所有客户端保留最初“建议的”文件名:

\n\n

第一眼:

\n\n

内容处置:附件;文件名=我的新文档.pdf;

\n\n

FF36:显示下载文件“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\n

FF36:按预期工作,即显示“我的新文档.pdf”。\nIE6+IE8:没有变化,就像以前一样。

\n\n

第二个变化:

\n\n

内容处置:附件;文件名=“我的%20New%20Document.pdf”;

\n\n

(将空格替换为 %20,如 URL 编码中所示,并保留双引号。)

\n\n

FF36:显示发回的内容,即“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\n

FF36:如上所述 - 不太好。\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 缓存文件夹中,此类用户将永远找不到该文件再次。这些事情会让人们非常愤怒和绝望......