从数据库加载图像,显示它们时出现问题

时间:2018-11-05 20:15:32

标签: c# asp.net-mvc database

在我看来,我有一个图像标签,如下所示:

<img src='@Url.Action( "Image", "Home", new { Id = @Id })'/>

这将在我的控制器中调用如下所示的方法:

    public string Image(int Id)
    {
        string strBase64 = "";
        using (SqlConnection con = OpenConnection())
        {
            SqlCommand cmd = new SqlCommand("spGetImageById", con);
            cmd.CommandType = CommandType.StoredProcedure;

            SqlParameter paramId = new SqlParameter()
            {
                ParameterName = "@Id",
                Value = Id
            };
            cmd.Parameters.Add(paramId);

            byte[] bytes = (byte[]) cmd.ExecuteScalar();
            strBase64 = "data:Image/png;base64," + Convert.ToBase64String(bytes);
        }
        return strBase64;
    }

此操作成功返回了我的base64图像,但是该图像未在视图中显示。如果我访问www.url?Id = 234,我会看到我的base64字符串,

enter image description here

所以我试图将其作为图像返回,而不是这样:

return "<img src=strBase64/>;

enter image description here

当然可以。但是,从视图调用<img src='@Url.Action( "Image", "Home", new { Id = @Id })'/>时如何直接显示图像? 我唯一看到的是“错误”图片。

2 个答案:

答案 0 :(得分:0)

我觉得这真的是JFIF。我在标题JFIF中找到了字母。参见下面的代码

            string input = "4AAQSkZJRgABAQEASAB0";
            byte[] png = Convert.FromBase64String(input);

            string mode = Encoding.UTF8.GetString(png.Skip(3).Take(4).ToArray());

答案 1 :(得分:0)

要将其作为实际图片返回,只需要做的就是将返回类型更改为FileStreamResult

public FileStreamResult Hero()
{
    byte[] imageData = heroImage.GetHeroImage(1);
    return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
}