Intereting Posts
Почему индекс столбцов не используется Как уменьшить время отклика простого запроса выбора? Любые альтернативы ключевому слову «или» в инструкции sql? Запрос SQL Server вычисляет diff. индекс в месяц TSQL: есть ли более быстрый или лучший способ шифрования значений? Как файлы резервного копирования Azure BACPAC отличаются от файлов BAK SQL Server? Как получить результат хранимой процедуры с помощью perl? EF ObjectQuery <T> Контекст, параметры, свойства соединения, эквивалентные по DbSet <T> Нормализация таблицы (разделяет поля, разделенные запятыми, на отдельные записи) Почему SQLServerDriver перешел от Slick 2.0.0-M3 к Slick 2.0.0? SQL-запрос для извлечения уникальных записей Эффективное управление наследованием Преобразование базы данных SQL Server 2008 SQL Server – Динамический стержень Что вызывает эту ошибку: «Недостаточно системной памяти в пуле ресурсов« internal »для запуска этого запроса?»

Потоковый байт для изображения в ASP.NET C #

У меня есть изображение, хранящееся в моей базе данных SQL Server, хранящейся с моими данными пользователя, которые я извлекаю сразу.

Теперь у меня есть байт [] прямо на странице, на которой я хочу показать его. Как поместить его в свой WebControls.Image? Я не хочу, чтобы вы вызывали HttpHandler и снова вызывали базу данных.

Это, очевидно, просто выводит его на всю страницу.

Context.Response.BinaryWrite(user.Picture.ToArray()); 

Solutions Collecting From Web of "Потоковый байт для изображения в ASP.NET C #"

Если это небольшое изображение, вы будете выводить его как закодированные в base64 данные в тег изображения. См. Здесь аналогичную ситуацию .

Но в 99,9% всех ситуаций вы бы создали HttpHandler, который возвращает изображение. Это самый простой и быстрый способ сделать это, я думаю.

Оберните массив байтов в объект MemoryStream и поместите его в кеш ASP.NET.

 MemoryStream ms = new MemoryStream(user.Picture.ToArray()); Guid imageGuid = new Guid(); HttpRuntime.Cache.Add(imageGuid.ToString(), ms, null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 

Затем используйте обработчик (.ashx), чтобы извлечь его из кеша и отправить его клиенту.

 string imageGuid = context.Request.QueryString[image]; MemoryStream ms = (MemoryStream)HttpRuntime.Cache[imageGuid]; // configure context.Response with appropriate content type and cache settings // ** Edit ** // It seems I need to be more explicit with regard to the above comment:- context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.Cache.SetLastModified(DateTime.UtcNow); context.Response.Cache.SetExpires(DateTime.UtcNow.AddHours(2); context.Response.Cache.SetMaxAge(TimeSpan.FromHours(2)); context.Response.Cache.SetValidUntilExpires(true); ms.WriteTo(context.Response.OutputStream); 

Теперь вы можете удалить MemoryStream из кэша.

 HttpRuntime.Cache.Remove(imageGuid); 

создайте отдельную страницу, где вы создадите образ, например: image.aspx, и используйте его на других страницах

 <img src="image.aspx?id=number" > 

number is id образа в базе данных

Вам нужен IHttpHander который будет писать байты изображения и правильный Content-Type в поток ответов. Смотрите, это и это .

Я уверен, что вы не можете сделать это на самой странице.

Если вы не хотите создавать обработчик HTTP для вывода изображения, то ваша альтернатива заключается в создании отдельной страницы aspx . Установите src вашего тега img чтобы указать на эту страницу, передав какой-то идентификатор в строке запроса, чтобы данные изображения можно было вытащить из базы данных.

Сказав это, настройка страницы aspx для этого не проще и проще, чем создание ashx . Я бы рекомендовал сделать это правильно и создать обработчик HTTP.