C# 无法在MVC 5 ASP.Net中将字节[]呈现为图像

C# 无法在MVC 5 ASP.Net中将字节[]呈现为图像,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个使用Northwind数据库的简单MVC5应用程序。该视图显示了Northwind中categories表中的类别列表。我曾尝试使用img标记来呈现字节数组,但没有成功 我已经看过并尝试过使用自定义html助手,但即使这样也不起作用 将字节[]转换为图像时,我的方法中是否缺少某些内容 尝试了以下内容(查看img标签了解我的尝试) 行动方法 public class CategoriesController : Controller { private Northw

我有一个使用Northwind数据库的简单MVC5应用程序。该视图显示了Northwind中
categories
表中的类别列表。我曾尝试使用
img标记来呈现字节数组,但没有成功

我已经看过并尝试过使用自定义html助手,但即使这样也不起作用

将字节[]转换为图像时,我的方法中是否缺少某些内容

尝试了以下内容(查看img标签了解我的尝试)

行动方法

  public class CategoriesController : Controller
  {
        private NorthwindDB db = new NorthwindDB();

        // GET: Categories
        public ActionResult Index()
        {
            return View(db.Categories.ToList());
        }
  }

我发现将Nortwind图像转换为base64字符串格式并不容易。我找到了一个新的。根据解释,“Northwind图像是用Microsoft Access创建的,所以它们有一个78字节的OLE头”。因此,我们应该删除标题。首先,修改
类别
实体

public partial class Category
{
    public int CategoryID { get; set; }

    [Required]
    [StringLength(15)]
    public string CategoryName { get; set; }

    [Column(TypeName = "ntext")]
    public string Description { get; set; }

    [Column(TypeName = "image")]
    public byte[] Picture { get; set; }

    [NotMapped]
    public string Base64String
    {
        get
        {
            var base64Str = string.Empty;
            using (var ms = new MemoryStream())
            {
                int offset = 78;
                ms.Write(Picture, offset, Picture.Length - offset);
                var bmp = new System.Drawing.Bitmap(ms);
                using (var jpegms = new MemoryStream())
                {
                    bmp.Save(jpegms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    base64Str = Convert.ToBase64String(jpegms.ToArray());
                }
            }
            return base64Str;
        }
    }
}
然后将
Base64String
属性放入img属性中

<img src="@String.Format("data:image/jpg;base64,{0}", item.Base64String)" />


在我更改为您的格式后,它仍然无法工作。您是否可以共享HTML输出?您可以在本视频中看到详细的输出:我使用的是标准Northwind数据库,该数据库预先填充了数据。如果您的计算机上有此数据库,则转到“类别”表,最后一列包含列的
图像
数据类型。所以,我不保存任何数据,只是检索它。可能这个图像列最初创建时是用于Access数据库的,在迁移到SQL Server时从未更改过!
public partial class Category
{
    public int CategoryID { get; set; }

    [Required]
    [StringLength(15)]
    public string CategoryName { get; set; }

    [Column(TypeName = "ntext")]
    public string Description { get; set; }

    [Column(TypeName = "image")]
    public byte[] Picture { get; set; }

    [NotMapped]
    public string Base64String
    {
        get
        {
            var base64Str = string.Empty;
            using (var ms = new MemoryStream())
            {
                int offset = 78;
                ms.Write(Picture, offset, Picture.Length - offset);
                var bmp = new System.Drawing.Bitmap(ms);
                using (var jpegms = new MemoryStream())
                {
                    bmp.Save(jpegms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    base64Str = Convert.ToBase64String(jpegms.ToArray());
                }
            }
            return base64Str;
        }
    }
}
<img src="@String.Format("data:image/jpg;base64,{0}", item.Base64String)" />