Я получаю изображение в формате байтового массива от контроллера. Как я могу отобразить это в представлении? самым простым способом.
Отображение изображения из базы данных в asp mvc
Ответ 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();