【问题标题】:Retrieve and display image from database using ASP.Net MVC使用 ASP.Net MVC 从数据库中检索和显示图像
【发布时间】:2012-11-02 09:57:07
【问题描述】:

我想从数据库中检索图像,然后将其发送到查看并显示为缩略图。这是我的代码,但它有一些错误,我无法正确返回图像。 我正在使用 ASP.Net MVC 和 aspx 页面。

控制器:

public ActionResult showImg(int id)
{
   var imageData = from m in db.Products
                   where m.ShopId == 3
                   select Image.FromStream(new MemoryStream(m.Product_img.ToArray()));

   return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
}

查看:

<img src='<%= Url.Action("showImg", "image", new { id = ViewData["imageID"] } ) %>' /> 

【问题讨论】:

  • 您是否排除了任何数据库问题,只是尝试返回硬编码文件名而不是内存流?
  • 不,这只是一个测试。我不会在实际情况下使用硬编码。
  • 我知道你不想硬编码它——但你确定这不是数据库连接问题吗?您的查询是否返回了您想要的结果?
  • 是的,朋友,我已经成功地将一张图片插入到表格中,但现在我想找回它。用 System.Drawing.Image 填充的 imageData 但 FileStreamResult 想要返回 (byte[],string)。就是这样。

标签: asp.net-mvc image


【解决方案1】:

看起来您不需要在 linq 语句中重新创建 Image 对象,只需返回流并将其传递给您的 FileStreamResult

var image = (from m in db.Products
             where m.ShopId == 3
             select m.Product_img).FirstOrDefault();

var stream = new MemoryStream(image.ToArray());

return new FileStreamResult(stream, "image/jpeg");

【讨论】:

  • 无法将 System.Linq.IQueryable 转换为 System.IO.Stream
  • LINQ to Entities 中仅支持无参数构造函数和初始化程序。
  • 再次更新了答案,现在在 linq 语句之外执行 MemoryStream 构造。
【解决方案2】:

非常感谢尼克。您的代码现在是正确的。我是这样写的:

    var stream = (from m in db.Products where m.ShopId == 3 select m.Product_img).FirstOrDefault();

            return File(stream, "image/jpeg");

【讨论】:

    猜你喜欢
    • 2012-01-09
    • 2013-07-26
    • 2015-06-04
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多