IE中的文件下载名称只是“untitled.bmp” - 如何修复?

时间:2011-11-02 15:56:44

标签: asp.net-mvc internet-explorer

我正在使用ASP.Net MVC3,并使用以下方式提供文件:

public class ByteResult : ActionResult
{
    public String ContentType { get; set; }
    public byte[] Bytes { get; set; }


    public ByteResult(byte[] sourceStream, String contentType)
    {
        Bytes = sourceStream;
        ContentType = contentType;

    }

    public override void ExecuteResult(ControllerContext context)
    {
        var response = context.HttpContext.Response;
        response.Clear();
        response.Cache.SetCacheability(HttpCacheability.NoCache);
        response.ContentType = ContentType;

        var stream = new MemoryStream(Bytes);
        stream.WriteTo(response.OutputStream);
        stream.Dispose();       

    }
}

使用此方法在页面中嵌入照片时,当用户选择"将图片/图像保存为..."从上下文菜单中,“另存为”对话框显示所有浏览器的img src属性的文件名,除了IE (当然),它提供了" untitled.bmp" 。呸。

如何修复IE?

2 个答案:

答案 0 :(得分:5)

您无需创建自己的ActionResult来返回字节内容。它已经存在,它被称为FileResult

在您的控制器中,您将使用File方法,如下所示:

public ActionResult Do()
{
    return File(byteContentOrStream, "image/bmp", "yourfilename.bmp");
}

第3个参数设置内容处理中的文件名。

自己设置内容处理会起作用;但它内置于ASP.NET中,并根据RFC 2183处理事物。例如,如果文件名包含引号,它会处理正确的转义。

答案 1 :(得分:3)

向浏览器“建议”文件名的标准方法是加入Content-Disposition header in the response。像这样:

Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.bmp", someString));