Я пытаюсь отобразить изображения разных пользователей через веб-форму - PullRequest
1 голос
/ 16 декабря 2011

Проект, над которым я работаю, в основном имеет модуль для комментариев.Пользователи могут оставлять сообщения, а сообщения могут подвергаться комментариям.Я уже сделал большую часть, но застрял в той части, где мне нужно загрузить все изображения по всем опубликованным сообщениям и комментариям.

Изображение профиля каждого пользователя (миниатюра), которое я хочу отображать рядом с его / ее постом,Изображения хранятся в базе данных, а НЕ в файловой системе.Я пробовал много способов, и ни один из них, похоже, не работает.

вот как я получаю массив байтов (данные изображения) из базы данных

TestDBDataContext context1 = new TestDBDataContext();

        var r = (from a in context1.ImageTables where a.Id == 8 select a).First();

        MemoryStream stream = new MemoryStream(r.FileImage.ToArray());

Метод 1: (это не работает, по какой-то причине показывает невидимое изображение с расширением .aspx.jpeg, которое выглядит поврежденным)

HTML-тег изображения в веб-форме

<img src="WebForm1.aspx" alt="" />

код позади

 var r = (from a in db.ImageTables where a.Id == 17 select a).FirstOrDefault();
            if (r != null)
            {                    
                Response.ContentType = "image/jpeg";
                Response.BinaryWrite(r.FileImage.ToArray());
                return;
            }

Метод 2 Попытка сохранить изображение как объект System.Drawing.Image и затем связать с ним источник изображения.Этот способ работает, но нет смысла иметь фотографии в базе данных, если я не могу получить и отобразить несколько изображений одновременно.

        TestDBDataContext context1 = new TestDBDataContext();

        var r = (from a in context1.ImageTables where a.Id == 8 select a).First();

        MemoryStream stream = new MemoryStream(r.FileImage.ToArray());

        System.Drawing.Image newImage;

        newImage = System.Drawing.Image.FromStream(stream);
        Random random = new Random();
        newImage.Save("D:\\" + random.Next(1000, 5000) + ".jpeg");

Я надеюсь, что вы, ребята, готовы поставить меня на правильный путь здесь!Большое спасибо!

1 Ответ

2 голосов
/ 16 декабря 2011

Ну, в нашем случае, когда мы пытаемся отобразить изображение, которое читается из базы данных, мы обычно создаем HttpHandler и устанавливаем изображение, например, как:

Logo.ImageUrl = "~/Handlers/GetTempLogo.ashx?LogoGUID=" + Session["TempLogoGUID"];

an в обработчикеу нас есть:

using (aDataContext db = new aDataContext())
            {
                var objData = (from c in db.Companies where c.CompanyId == CompanyID select c.LogoSmall).FirstOrDefault();
                if (objData == null)
                {
                    context.Response.BinaryWrite(System.IO.File.ReadAllBytes(HttpContext.Current.Server.MapPath("~/Images/defaultLogo.png")));

                    return;
                }
                using (System.IO.MemoryStream str = new System.IO.MemoryStream(objData.ToArray(), true))
                {
                    str.Write(objData.ToArray(), 0, objData.ToArray().Length);
                    Byte[] bytes = str.ToArray();
                    context.Response.BinaryWrite(bytes);
                }
            }

Надеюсь, что это дает вам подсказку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...