带有实体框架和 SQL Server 数据库的 ASP.NET MVC - 图像未显示在视图中......错误显示“无法将“字节”转换为“字符串”

Posted

技术标签:

【中文标题】带有实体框架和 SQL Server 数据库的 ASP.NET MVC - 图像未显示在视图中......错误显示“无法将“字节”转换为“字符串”【英文标题】:ASP.NET MVC with Entity Framework and a SQL Server database - image not showing in view ... The error says 'cannot convert "byte" to "string"' 【发布时间】:2021-12-25 18:57:13 【问题描述】:

我是 ASP.NET MVC 的新手,所以请不要评判我...我遇到的问题是我的 SQL Server(字节数据类型)中的图像没有显示在我的视图中。它说“无法将byte[] 转换为字符串”。我该怎么办?

这是我的控制器方法ViewProduct

public ActionResult ViewProduct()
         
    return View();


public ActionResult ViewProd()

    inventoryDBEntities1 dbe = new inventoryDBEntities1();
    return View(dbe.tbl_product.ToList());

这是我的模型类,名为tbl_product

public partial class tbl_product

    public int productID  get; set; 
    public byte[] prod_image  get; set;       

这是我的观点:

@model IEnumerable<PointofSale.Models.tbl_product>

<table>
    <tr>
        <td>
            Image
        </td>
    </tr>

    <tr>
        @foreach (var item in @Model)
        
            <td>
                // The error is around here ( V )!!
                <img src="@Url.Content(item.prod_image)"  />
            </td>
        
    </tr>
</table>

【问题讨论】:

@Url.Content 需要一个代表应用程序虚拟目录中文件路径的字符串,例如:"~/images/exampleImage.png" 有人可能会好奇为什么要将类似的内容存储在byte[] 属性中. prod_image 是否有可能不保存文件路径,而是保存二进制图像的原始字节? 【参考方案1】:

您需要通过将byte[] 转换为base64 字符串 来显示图像。

@foreach (var item in @Model)

   <td>
       @
           string imageBase64Data = Convert.ToBase64String(item.prod_image);
           string imageDataURL = string.Format("data:image/png;base64,0", imageBase64Data);

           <img src="@Url.Content(imageDataURL)"   />
        
   </td>


参考文献

Display Image From Byte Array In ASP.NET MVC

【讨论】:

不错的答案。这确实意味着存储在数据库中的所有图像都需要采用一致的格式,在这种情况下,当它们被序列化到数据库中时是 PNG。如果它们可以是其他格式,则数据结构需要记录格式以及要输出到 URL 或馈送到转换器以生成 PNG base64 字符串的字节。 感谢史蒂夫的指出。要么发布所有者来标准化图像的格式,要么使用带有列存储文件扩展名的 DB 表。并从数据库中检索它,将imageDataUrl 设置为String.Format("data:image/png;0,1", file_extension, imageBase64Data);

以上是关于带有实体框架和 SQL Server 数据库的 ASP.NET MVC - 图像未显示在视图中......错误显示“无法将“字节”转换为“字符串”的主要内容,如果未能解决你的问题,请参考以下文章

使用带有实体框架代码优先和 ASP.NET MVC 3 和 mvc miniprofiler 的 SQL Server CE 时出现问题

使用带有 MVC4 SQL Server 的实体框架插入后触发器不会触发

优化实体框架生成的 SQL Server 执行计划

Net Core:实体框架和 SQL Server 时态表、自动脚手架

实体框架和 SQL Server 视图

SQL Server 和实体框架性能改进