Потоковая передача байта [] для Обработки изображений в ASP.NET C#

Я создал бы подкласс NSFormatter для парсинга временных стоимостей в том формате от входных данных (можно поместить один на текстовое поле, чтобы автоматически преобразовать ввод данных пользователем или использовать его для парсинга от источника данных в коде). Имейте его, возвращают объединенное число секунд как NSTimeInterval (дважды представляющий секунды) обернутый в NSNumber. Оттуда легко вычесть различие и отобразить его с помощью того же класса NSFormatter, который Вы создали. И в парсинге и в отображении значений, Вы - одно ответственное для записи преобразования кода с секунд к hours:minutes:seconds или безотносительно формата, который Вы любите. Вы могли также преобразовать эти значения в NSDate как упомянутый mouviciel, если он имеет смысл для Вашего приложения. Просто имейте в виду, что Вы всегда собираетесь быть хранением разницы во времени со ссылочной даты, обычно Jan 1-й 1970 (NSDate имеет методы, чтобы сделать это для Вас).

5
задан Andrew Shepherd 2 November 2010 в 05:55
поделиться

5 ответов

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

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

4
ответ дан 14 December 2019 в 19:20
поделиться

Оберните массив байтов в объект 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), чтобы извлечь его из кеша и отправить его в client.

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);
1
ответ дан 14 December 2019 в 19:20
поделиться

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

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

номер - это идентификатор изображения в базе данных

0
ответ дан 14 December 2019 в 19:20
поделиться

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

0
ответ дан 14 December 2019 в 19:20
поделиться

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

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

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

0
ответ дан 14 December 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: