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


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

5 55

5 ответов:

создайте контроллер для отображения изображений с действием Show, которое принимает идентификатор изображения для отображения из базы данных. Действие должно возвращать 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"] } ) %>' />

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

<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 })' />

метод "Show" на контроллере для принятого ответ будет работать, но я бы изменил жестко закодированное "изображение / jpg" для использования файла.ContentType-вы можете сохранить это вместе с byte [], поэтому вам не нужно угадывать, загружают ли пользователи свои собственные изображения.

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

  1. я загружаю mvc2 preview 1

  2. не нужно беспокоиться о Microsoft.сеть.MVC вещи я не мог найти ничего из этого материала в любом случае и искать около часа, пытаясь выяснить, что он эволюционировал в

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

в моем классе контроллера, который я назвал магазин, у меня это

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

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");
    }
}

предполагая, что у вас есть 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();