我在一个应该渲染图像的MVC3应用程序中有一个相当简单的Action ...
public FileStreamResult Photo(int id)
{
//get the raw bytes for the photo
var qry = from p in db.Photos
where p.PhotoID == id
select p.PhotoData;
var data = qry.FirstOrDefault();
var mem = new MemoryStream(data);
var fs = new FileStreamResult(mem, "image/jpeg");
return fs;
}
当我运行这个时,我在Chrome中获得一个空白文档,Firefox在实际文档区域中显示URL,IE呈现原始字节。
Chrome给我一条消息:资源被解释为文档,但是使用MIME类型image / jpeg
进行传输这告诉我,流数据没有被发送到浏览器,实际上它正在接收一个空文档,但是IE建议相反。
之前有人遇到过这个问题,或者知道如何解决这个问题?
答案 0 :(得分:3)
如果您已经拥有照片的字节数组,则不需要流:
public ActionResult Photo(int id)
{
var data = db.Photos.FirstOrDefault(p => p.PhotoID == id);
if (data == null)
{
return HttpNotFound();
}
return File(data.PhotoData, "image/jpeg");
}
您的代码的问题是您需要在开始时重置内存流,但正如我所说,您不需要所有这些。