Как показать изображение в браузере только с его содержимым (byte []) - PullRequest
2 голосов
/ 14 января 2011

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

У меня есть только массив byte[] в моей модели,с содержанием изображения.Есть ли какой-нибудь "простой" трюк, чтобы показать изображение в виде, не записывая его на диск?

Первый подход, который приходит мне в голову, это написание временного файла, но:

  1. Какое имя файла мне выбрать?
  2. Когда мне его удалять?Я боюсь, что мы пропустим эти файлы.

Так что я не хочу записывать содержимое в файл.Есть ли другой подход?

Спасибо заранее.


РЕДАКТИРОВАТЬ : Страница результатов не только изображение, мне нужно показать текст, иниже изображение, например:

  <%= Response.Write("Some text here") %>
  <%= /* Here my image */ %>

Ответы [ 3 ]

6 голосов
/ 14 января 2011

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

Это будет что-то , например:

[HttpGet]
public ActionResult Render(...)
{
    byte[] imageBytes = ...;

    MemoryStream imageStream = new MemoryStream();
    imageStream.Write(imageBytes, 0, imageBytes.Length);

    return new FileStreamResult(imageStream, "image/png"); // might be a different mime type depending on your image type
}

Из своего просмотра вы можете сделать:

<p>Some text here</p>
<img src="<%= Url.Action("Render", "MyController", new { params as needed }) %>" alt="Image" />
1 голос
/ 14 января 2011

Несколько опций:

  • Написать обработчик HTTP, который будет возвращать массив байтов и указать URL-адрес изображения на него
  • Создать собственный контроллер изображения и указать URL-адрес изображения на него
  • Используйте схему URI данных , выводящую данные изображения напрямую
  • Если вы просто хотите, чтобы изображение не отображало HTML, просто передайте его с правильными заголовками
0 голосов
/ 14 января 2011

У вас может быть страница, на которой изображение будет выглядеть следующим образом:

var context = System.Web.HttpContext.Current;
context.Response.Clear();    
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.End();

Вам также следует установить context.Response.ContentType на что-то значимое.Если вы используете ImageEncoder для генерации массива байтов, вы можете использовать его свойство mimeType, если нет - найти способ предоставить правильный тип содержимого (например, "image/PNG")

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