Загрузка изображений из базы данных, проблема их отображения - PullRequest
0 голосов
/ 05 ноября 2018

На мой взгляд, у меня есть тег изображения, который выглядит следующим образом:

<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 голосов
/ 06 ноября 2018

Чтобы вернуть это как реальное изображение, все, что нужно было сделать, это изменить тип возвращаемого значения на FileStreamResult

public FileStreamResult Hero()
{
    byte[] imageData = heroImage.GetHeroImage(1);
    return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
}
0 голосов
/ 06 ноября 2018

Я думаю, это действительно JFIF. Я нашел буквы в заголовке JFIF. Смотрите код ниже

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

            string mode = Encoding.UTF8.GetString(png.Skip(3).Take(4).ToArray());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...