在asp mvc中显示数据库中的图像

时间:2009-05-19 00:57:47

标签: c# asp.net-mvc

我从控制器获取字节数组格式的图像,如何在视图中显示?以最简单的方式。

6 个答案:

答案 0 :(得分:116)

创建一个控制器,用于显示带有Show动作的图像,该动作将从数据库中显示图像的id。该操作应返回包含具有适当内容类型的图像数据的FileResult。

public class ImageController : Controller
{
    public ActionResult Show( int id )
    {
        var imageData = ...get bytes from database...

        return File( imageData, "image/jpg" );
    }
}

在您的视图中,构建图像并使用图像ID使用控制器和操作构建图像的路径。

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

答案 1 :(得分:9)

使用此接受的答案:

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

很好,但是对于mvc 4已经过时了。现在应该更新语法:

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

另外,我发现当我需要这个功能时,我已经将其他数据传递给视图了,所以使用Model而不是ViewData很好。

public class MyModel {
    public string SomeData {get;set;}
    public int FileId {get; set;}
}

来自您的控制器:

public ActionResult Index() {
    MyEntity entity = fetchEntity();

    MyModel model = new MyModel {
        SomeData = entity.Data,
        FileId = entity.SomeFile.ID
    };

    return View(model);
}

最后从您的观点来看:

<img src='@Url.Action("show", "image", new { id = Model.FileId })' />

控制器上用于接受答案的“显示”方法将起作用,但我会更改硬编码的“image / jpg”以使用File.ContentType - 您可以将其与byte []一起存储,这样您就不需要了猜猜用户是否正在上传自己的图片。

答案 2 :(得分:4)

我知道这篇文章相当陈旧但是当我试图弄清楚如何在大多数情况下做到这一点时,它是第一个出现的问题之一Augi答案是正确的但是大多数组件都已过时了

  1. 我下载mvc2预览1

  2. 无需担心microsoft.web.mvc的东西我无论如何都找不到任何东西并且搜索大约一个小时试图找出它演变成什么

  3. 这是我编写的代码,用于显示图像类型

    的db字段中的图像

    在我称为商店的控制器类中我有这个

    public ActionResult GetImage(int id)
    {
        byte[] imageData = storeRepository.ReturnImage(id);
    
        //instead of what augi wrote using the binarystreamresult this was the closest thing i found so i am assuming that this is what it evolved into 
        return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
    }
    
    //in my repository class where i have all the methods for accessing data i have this
    
    public byte[] ReturnImage(int id)
    {
        // i tried his way of selecting the right record and preforming the toArray method in the return statment 
        // but it kept giving me an error about converting linq.binary to byte[] tried a cast that didnt work so i came up with this
        byte[] imageData = GetProduct(id).ProductImage.ToArray();
        return imageData;
    }
    

    现在,对于我的视图页面,我尝试了各种各样的方式,我发现这些形式,没有任何工作我假设他们刚刚过时,所以我试着一时兴起,我能想到的最简单的一切,它完美地工作

    <image src='/store/getimage/<%= Html.Encode(Model.productID) %>' alt="" />
    

    我一直从网站上收到有关发布img标签的错误,因此请务必将上述图片更改为img

    希望这有助于阻止任何人整天寻找当前的答案

    http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30886

答案 3 :(得分:2)

public ActionResult EmployeeImage(int id)
{
    byte[] imageData ="Retrieve your Byte[] data from database";
    if (imageData!= null && imageData.Length > 0)
    {
        return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
    }
}

答案 4 :(得分:2)

这里的每个答案可能都是正确的,但我认为最简单的方法是获取包含图像的字节数组或模型,并像这样简单地添加

<img  src="data:image/jpeg;base64,@(Convert.ToBase64String(Model.Picture))">

答案 5 :(得分:-2)

假设您有一个包含两列的dataRow(dr),“name”和“binary_image”(binary_image包含二进制信息)

 Byte[] bytes = (Byte[])dr["Data"];
 Response.Buffer = true;
 Response.Charset = "";

 Response.Cache.SetCacheability(HttpCacheability.NoCache);
 Response.ContentType = dr["Image/JPEG"].ToString();

 Response.AddHeader("content-disposition", "attachment;filename=" & dt.Rows[0]["Name"].ToString());

 Response.BinaryWrite(bytes);
 Response.Flush();
 Response.End();