Я собрал следующий метод, который вызывает мой репозиторий для получения изображения (возвращается как Linq.Binary).Затем он записывает байтовый массив в OutputStream и устанавливает тип содержимого:
public EmptyResult GetImage(int id)
{
Byte[] imageBytes = _repository.GetImage(id).ToArray();
Response.OutputStream.Write( imageBytes, 0, imageBytes.Length);
Response.ContentType = "image/png";
return new EmptyResult();
}
Это один из тех случаев, когда я писал блок кода, он работал с первой попытки (всегда страшно), а теперь яЯ пытаюсь продумать, где он сломается.
Мои требования просто вернуть изображение, которое я получаю из базы данных, без текста.
То, что я делаю выше, позволяет мне избежать использования преобразования в растровое изображение (или другой тип изображения), мне не нужно ссылаться на System.Drawing, мне не нужно писатьпользовательский ActionResult, и мне не нужно беспокоиться об утилизации ресурсов.
Мне нужно немного подумать, но я думаю, что это также открывает путь к использованию MVC OutputCache без особых проблем.
Я вижу людей, пишущих собственные ActionResults, и пытаюсь выяснить выгоду.Я имею в виду, я понимаю дополнительную гибкость и способность обрабатывать несколько типов, но одно решение, которое я нашел, - это Binary.ToArray (), преобразованный в растровое изображение и созданный обработчик ashx для возврата изображения.Нужно ли что-нибудь из этого?
Разве это плохо для записи в выходной поток при возврате EmptyResult?
Во всех современных браузерах приведенный выше код позволяет мне отображать изображение с простым:
<img id="display-image"
src="<%= Url.Action("GetImage", new { id = Model.ImageID }) %>" />
Так их недостатки в этом подходе?
Спасибо за мысли / комментарии, друзья.
Приветствия, -james