C# 如何让IE8理解文件下载名?
我使用从服务器下载文件。在我的例子中,C# 如何让IE8理解文件下载名?,c#,asp.net,asp.net-mvc-3,internet-explorer,browser,C#,Asp.net,Asp.net Mvc 3,Internet Explorer,Browser,我使用从服务器下载文件。在我的例子中,contentType是application/vnd.openxmlformatsofcedocument.spreadsheetml.sheet。我确实在fileDownloadName参数中为文件指定了一些特殊名称。它在Firefox、Opera和IE9中运行得非常好 但是,IE8返回操作的名称,而不是我指定的名称。如果url是。/Report/Download,它看起来像Download.xlsx 为什么会这样?我能做些什么 根据我使用的过载,应该
contentType
是application/vnd.openxmlformatsofcedocument.spreadsheetml.sheet
。我确实在fileDownloadName
参数中为文件指定了一些特殊名称。它在Firefox、Opera和IE9中运行得非常好
但是,IE8返回操作的名称,而不是我指定的名称。如果url是。/Report/Download
,它看起来像Download.xlsx
为什么会这样?我能做些什么
根据我使用的过载,应该可以解决这个问题。但是IE8希望对文件下载名称进行编码。例如,当使用
HttpUtility.urlpathcode
编码时,Firefox开始显示编码的文件名
最终是否有一个通用的解决方案
Response.AppendHeader("content-disposition", "attach;filename=" + fileName);
return File(fileStream, contentType);
将“附加;”更改为“内联;”将导致文件在浏览器中打开,而不是在浏览器提示保存文件时打开
注意:我还遇到了浏览器和文件名值的问题。非ASCII字符、空格和标点符号可能会导致浏览器忽略此标题()。一旦我无法找到一种通用方法来提供至少IE8+和Mozilla的文件下载名,作为临时解决方法,我将使用以下方法:
Stream report = GetReport();
string filename = GetFileName();
if (Request.Browser.Browser.Equals("IE", StringComparison.CurrentCultureIgnoreCase))
filename = HttpUtility.UrlPathEncode(filename);
return File(
report,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
filename);
Firefox显示的编码文件名不正确;非编码-由IE8实现。
由于当前的区域性是Ru,文件名包含西里尔字母符号,这似乎是IE8(可能还有空格)的问题
我愿意接受任何建议,这些建议可能会引导我采用正确的和/或相反的方法(如果有)在ASP.Net MVC 3中提供文件下载名。在此之前,我接受这个糟糕的解决方法作为答案,因为它至少可以完成工作。如果我可以在不直接使用
响应的情况下一次指定文件名,我为什么要使用您提到的文件
重载?除此之外,我一点也不喜欢这种效果,浏览器开始使用非标准对话框来提示下载。至于链接,它也没有给出答案,因为我的文件名中没有任何“特殊”字符。我只是用Report.xlsx
对它进行了测试,甚至IE8也没有正确地解决这个问题。相反,编码问题(在链接的线程中描述)确实有助于解决任何IE的问题。但是Firefox开始显示编码的文件名。这两种方法似乎都不是通用的,至少在IEs和Firefox中是如此。文件名应该被引用,以防它包含空格,这将使浏览器无法使用filename=\”“+filename+“\”“
您能不能改为清理输出文件名,使其不需要任何URL编码(例如“a-ZA-Z-”)@AdrianGodong filename是俄语的;我一了解,这就是IE8的问题;我肯定不会更改语言。