为什么我的视频中没有显示我的图像?

时间:2013-02-10 17:11:22

标签: c# asp.net-mvc entity-framework razor

我将图像作为字节数组存储在SQL数据库中。

这是我的Index方法(在控制器内):

public ActionResult Index()
{
    var list = db.UserProfiles.ToList();

    Dictionary<int, ActionResult> picture = list.ToDictionary(item => item.CarID, item => CarPic(item.Picture));

    ViewBag.CarPictures = picture;

    return View(list);
}

这是我的CarPic方法:

public ActionResult CarPic(byte[] imageBytes)
{
    return imageBytes == null ? null : File(imageBytes, "image/jpeg");
}

以下是我尝试在视图中显示图片的方式:

foreach(var item in Model)
{
    <img src="@ViewBag.CarPictures[item.CarID]"/>
}

这是在网络浏览器中显示的内容:

Image

以下是Intellisense的截图:

Intellisense

所以图片不为空,它是一个字节数组。图像本身是JPEG。这是我用来将图像转换为字节数组以将其存储在数据库中的代码:

[Authorize]
[HttpPost]
public ActionResult Create(Stock stock, HttpPostedFileBase file)
{
    if (file != null)
    {
        if (file.ContentType.Contains("image"))
        {
            using (var inputStream = file.InputStream)
            {
                var memoryStream = inputStream as MemoryStream;
                if (memoryStream == null)
                {
                    memoryStream = new MemoryStream();
                    inputStream.CopyTo(memoryStream);
                }

                var data = memoryStream.ToArray();

                stock.Picture = data;
            }
        }
    }

    if (ModelState.IsValid)
    {
        db.UserProfiles.Add(stock);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(stock);
}

我检查了数据库,确实填写了该字段。这是我的股票模型:

[Table("Stock")]
public class Stock
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int CarID { get; set; }

    public byte[] Picture { get; set; }
    //etc etc
}

我在这里撕扯我的头发试图弄清楚为什么这不起作用,因为我认为我已经做好了一切。我做错了什么?

非常感谢

1 个答案:

答案 0 :(得分:3)

您误解了<img>标记。

<img src="..." />可让您显示图片来自网址 src属性必须指定返回实际图像的URL。

如果您想在页面中嵌入图片,可以使用data: URI。