如果文件名包含重音符号,则它在Opera,FF,Chrome和IE9中按预期工作。
但是在IE8文件类型中是“未知文件类型”,并显示“文件”作为文件名(实际上是URL的最后部分)。
有没有人知道解决方法?除了替换文件名中的“特殊”字符?
测试代码:(文件|新项目|添加控制器)
public class FileController : Controller
{
public ActionResult Index(bool? Accents)
{
byte[] content = new byte[] { 1, 2, 3, 4 };
return File(content, "application/octet-stream", true.Equals(Accents) ? "dsaé.txt" : "dsae.txt");
}
}
像这样测试: http://localhost/file,和 http://localhost/file?accents=true
public class FileContentResultStupidIE : FileContentResult //yeah, maybe i am not totally "politically correct", but still...
{
public FileContentResultStupidIE(byte[] fileContents, string contentType) : base(fileContents, contentType) { }
public override void ExecuteResult(ControllerContext context)
{
var b = context.HttpContext.Request.Browser;
if (b != null && b.Browser.Equals("ie", StringComparison.OrdinalIgnoreCase) && b.MajorVersion <= 8)
{
context.HttpContext.Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlPathEncode(base.FileDownloadName) + "\"");
WriteFile(context.HttpContext.Response);
}
else
{
base.ExecuteResult(context);
}
}
}
答案 0 :(得分:2)
尝试在控制器操作中添加以下行:
Response.HeaderEncoding = Encoding.GetEncoding("iso-8859-1");
您可以查看讨论这些问题的following blog post。不幸的是,没有一个通用的解决方案适用于所有浏览器。
答案 1 :(得分:0)
这是用户在某个时候上传到您系统的文件吗?如果是这样,请限制在文件名中使用重音符号。如果不是 - 请勿在文件名中使用重音:)。