Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让IE8理解文件下载名?_C#_Asp.net_Asp.net Mvc 3_Internet Explorer_Browser - Fatal编程技术网

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的问题;我肯定不会更改语言。