ASP mvc文件结果与口音+ IE8 - bug



如果文件名包含重音,它可以在Opera, FF, Chrome和IE9中正常工作。

但是在IE8中文件类型是"未知文件类型",并显示"file"作为文件名(实际上是URL的最后一部分)。

有谁知道解决方法吗?除了替换文件名中的"特殊"字符之外?

测试代码:(file | new project | add controller)

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);
        }
    }
}

尝试在控制器动作中添加以下行:

Response.HeaderEncoding = Encoding.GetEncoding("iso-8859-1");

你可以看看下面讨论这些问题的博客文章。不幸的是,没有一个通用的解决方案可以在所有浏览器中工作。

这是用户在某个时刻上载到系统的文件吗?如果是,请限制在文件名中使用重音。如果没有,不要在文件名中使用重音:)。

相关内容

  • 没有找到相关文章

最新更新