ASP MVC无法在视图中显示图像

时间:2015-09-02 15:35:44

标签: c# asp.net-mvc sqlite

所以我的形象是一个byte [],我希望在我的视图中显示。

这是我的图像模型:

    public class ImageModel
    {
        public Byte[] imageFirst { get; set; }
    }

这是我的控制器从db中选择图像:

public ActionResult Image()
    {
        string cs = "Data Source=" + Environment.CurrentDirectory + "\\ImageDB.db";

        using (SQLiteConnection con = new SQLiteConnection(cs))
        {
            var listOfImages = new List<ImageModel>();
            string stm = "SELECT * FROM Image";
            con.Open();

            using (SQLiteCommand cmd = new SQLiteCommand(stm, con))
            {
                using (SQLiteDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        listOfImages.Add(new ImageModel
                        {
                            imageFirst = Serialize(rdr["image_first"]),
                        });
                    }

                    rdr.Close();
                    Images = listOfImages;
                }
            }

            con.Close();
        }
        return View(Images);
    }

    public static byte[] Serialize(object obj)
    {
        var binaryFormatter = new BinaryFormatter();
        var ms = new MemoryStream();
        binaryFormatter.Serialize(ms, obj);
        return ms.ToArray();
    }

这是当我尝试在视图中显示图像时:

<img src="data:image/jpg;base64,@(Convert.ToBase64String(@item.imageFirst))" width="300px"/>

但我得到的只是这个图标:View image fail

我无法为我的爱弄清楚为什么它无法展示。图像存储为我只能假设是数据库中的blob,但现在我希望它们只是光盘上的图像文件,因为这似乎使它们更容易将它们附加到视图中。

2 个答案:

答案 0 :(得分:0)

假设imageFirst属性是有效的图像字节数组,您可能需要在输出中包含html原始模式:

<img src="data:image/jpg;base64,@Html.Raw(Convert.ToBase64String(item.imageFirst))" width="300px"/>

另外,使用item代替@item,因为您已经在@()或示例@Html.Raw中。

答案 1 :(得分:-1)

您正在使用哪种浏览器。 IE对数据URI有大小限制,我认为它是32 KB。转换为base64后,图像字符串的大小是多少。