我正在使用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?
答案 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));