Intereting Posts
Найдите реальное имя столбца псевдонима, используемого в представлении? Преобразование таблицы из строк в столбцы выполнять хранимую процедуру в качестве другого запроса пользователя varbinary to string на SQL Server Два отдельных экземпляра SQL Server с другим планом объяснения Создание пользователя SQL Server с разрешением на чтение одного представления и ничего другого – но он может видеть системные представления и процедуры? Выполнять хранимую процедуру программно внутри рекурсивного CTE вместо курсора Задание порта с помощью SqlConnectionStringBuilder? Как просматривать и изменять данные файла .mdf с помощью MS Access? SQL Server – обновить столбец, если строка является первой записью в группе SQL Server – использование предложения WITH в инструкции INSERT Исключая записи, основанные на соединении от одного до многих SQL SQL Sub-query или INNER-JOIN? Проводник / анализатор транзакций SQL Server Есть ли способ использовать GUID в django?

Потоковый байт для изображения в 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.