Asp.net mvc 3 在MVC3中从流中渲染图像时,FileStreamResult显示空的浏览器文档

Asp.net mvc 3 在MVC3中从流中渲染图像时,FileStreamResult显示空的浏览器文档,asp.net-mvc-3,filestreamresult,Asp.net Mvc 3,Filestreamresult,我在MVC3应用程序中有一个相当简单的操作,它应该呈现一个图像 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 da

我在MVC3应用程序中有一个相当简单的操作,它应该呈现一个图像

  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则相反


有人以前遇到过这个问题,或者知道如何避开它吗

如果您已经拥有照片的字节数组,则不需要流:

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

代码的问题是,您需要在开始时重置内存流,但正如我所说的,您不需要所有这些

如果您已经拥有照片的字节数组,则不需要流:

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");
}
代码的问题是,您需要在开始时重置内存流,但正如我所说的,您不需要所有这些