Подтвердить что ты не робот

Отображение изображения из базы данных в asp mvc

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

4b9b3361

Ответ 1

Создайте контроллер для отображения изображений с помощью действия "Показать", которое отображает идентификатор изображения для отображения из базы данных. Действие должно возвращать FileResult, который содержит данные изображения с соответствующим типом контента.

public class ImageController : Controller
{
    public ActionResult Show( int id )
    {
        var imageData = ...get bytes from database...

        return File( imageData, "image/jpg" );
    }
}

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

<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>' />

Ответ 2

Принятый ответ на использование этого:

<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>'

отлично, но устарел для mvc 4. Обновленный синтаксис должен теперь читать:

<img src='@Url.Action( "show", "image", new { id = ViewData["imageID"] })' />

Кроме того, я считаю, что, когда мне нужна эта функциональность, я уже передаю другие данные в представление, поэтому приятно использовать модель вместо ViewData.

public class MyModel {
    public string SomeData {get;set;}
    public int FileId {get; set;}
}

С вашего контроллера:

public ActionResult Index() {
    MyEntity entity = fetchEntity();

    MyModel model = new MyModel {
        SomeData = entity.Data,
        FileId = entity.SomeFile.ID
    };

    return View(model);
}

Наконец, с вашего взгляда:

<img src='@Url.Action("show", "image", new { id = Model.FileId })' />

Метод "Показать" на контроллере для принятого ответа будет работать, но я бы изменил hardcoded "image/jpg", чтобы использовать File.ContentType - вы можете сохранить это вместе с байтом [], чтобы вам не понадобилось угадать, загружают ли пользователи свои собственные изображения.

Ответ 3

Я знаю, что этот пост довольно старый, но он был одним из первых, который появился, когда я пытался понять, как это сделать. В большинстве случаев ответ Augi был прав, но большинство сборок устарели

  • i скачать mvc2 preview 1

  • Не нужно беспокоиться о материалах microsoft.web.mvc, я все равно не мог найти что-либо из этого материала и искать около часа, пытаясь понять, что он превратил в

это код, который я написал, который работает для меня для отображения изображения из поля db типа image

в моем классе контроллера, который я назвал хранилищем i, имеет этот

public ActionResult GetImage(int id)
{
    byte[] imageData = storeRepository.ReturnImage(id);

    //instead of what augi wrote using the binarystreamresult this was the closest thing i found so i am assuming that this is what it evolved into 
    return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
}

//in my repository class where i have all the methods for accessing data i have this

public byte[] ReturnImage(int id)
{
    // i tried his way of selecting the right record and preforming the toArray method in the return statment 
    // but it kept giving me an error about converting linq.binary to byte[] tried a cast that didnt work so i came up with this
    byte[] imageData = GetProduct(id).ProductImage.ToArray();
    return imageData;
}

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

<image src='/store/getimage/<%= Html.Encode(Model.productID) %>' alt="" />

Я продолжал получать сообщение об ошибке с сайта об отправке img-тегов, поэтому убедитесь, что вы изменили приведенное выше изображение на img

надеюсь, что это поможет остановить любого из охотников весь день для текущего ответа

http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30886

Ответ 4

public ActionResult EmployeeImage(int id)
{
    byte[] imageData ="Retrieve your Byte[] data from database";
    if (imageData!= null && imageData.Length > 0)
    {
        return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg");
    }
}

Ответ 5

Предполагая, что у вас есть dataRow (dr) с двумя столбцами, "name" и "binary_image" (binary_image содержит двоичную информацию)

 Byte[] bytes = (Byte[])dr["Data"];
 Response.Buffer = true;
 Response.Charset = "";

 Response.Cache.SetCacheability(HttpCacheability.NoCache);
 Response.ContentType = dr["Image/JPEG"].ToString();

 Response.AddHeader("content-disposition", "attachment;filename=" & dt.Rows[0]["Name"].ToString());

 Response.BinaryWrite(bytes);
 Response.Flush();
 Response.End();