我使用Controller.File(Stream fileStream, String contentType, String fileDownloadName)
Method 从服务器下载文件。就我而言,contentType
是application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
。我在fileDownloadName
参数中为文件指定了一些特殊名称。它在Firefox,Opera,IE9中运行良好。
但是,IE8会返回操作的名称,而不是我指定的名称。如果网址为Download.xlsx
,则看起来像../Report/Download
。
为什么会这样,我该怎么做?
根据Content-Disposition headers in .NET,我正在使用的超载应解决问题。但IE8希望对文件下载名称进行编码。然而,当用HttpUtility.UrlPathEncode
编码时,Firefox开始显示编码的文件名。
最终是否有通用解决方案?
答案 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)。