如何让IE8了解文件下载名称?

时间:2013-03-29 07:24:09

标签: c# asp.net asp.net-mvc-3 internet-explorer browser

我使用Controller.File(Stream fileStream, String contentType, String fileDownloadName) Method 从服务器下载文件。就我而言,contentTypeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet。我在fileDownloadName参数中为文件指定了一些特殊名称。它在Firefox,Opera,IE9中运行良好。

但是,IE8会返回操作的名称,而不是我指定的名称。如果网址为Download.xlsx,则看起来像../Report/Download

为什么会这样,我该怎么做?


根据Content-Disposition headers in .NET,我正在使用的超载应解决问题。但IE8希望对文件下载名称进行编码。然而,当用HttpUtility.UrlPathEncode编码时,Firefox开始显示编码的文件名。

最终是否有通用解决方案?

2 个答案:

答案 0 :(得分:2)

一旦我找不到为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中提供正确的和/或反转(如果有的话)方法来提供文件下载名称。直到我接受这个糟糕的解决方法作为答案,它至少可以完成这项工作。

答案 1 :(得分:0)

 Response.AppendHeader("content-disposition", "attach;filename=" + fileName);

 return File(fileStream, contentType);

更改“附加”; “内联”将导致文件在浏览器中打开,而不是浏览器提示保存文件。

注意:我也遇到过浏览器问题和文件名的值。非ASCII字符,空格和标点符号可能导致浏览器忽略此标题(Downloading file with ";" or "#" in file name ruins filename)。