C# 无法在MVC 5 ASP.Net中将字节[]呈现为图像
我有一个使用Northwind数据库的简单MVC5应用程序。该视图显示了Northwind中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
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)" />