Изображение ASP.NET MVC из массива байтов
В настоящее время у меня есть массив байтов, представляющий мое изображение в моей модели ViewModel. Я показываю его со следующим кодом:
<img src="@String.Format("data:image/gif;base64,{0}", Convert.ToBase64String(Model.Image))" />
Теперь я не хочу иметь строку Base64 в исходном файле, а скорее ссылку на изображение. Как:
<img src="Images/" + Model.Id"/>
который вернет изображение.
Как написать такой метод для возврата ссылки на изображение?
Ответы
Ответ 1
Вы можете определить действие контроллера, которое будет обслуживать изображение:
public class ImagesController: Controller
{
public ActionResult Index(int id)
{
byte[] imageData = ... go get your image data from the id
return File(imageData, "image/png"); // Might need to adjust the content type based on your actual image type
}
}
и в вашем представлении просто укажите свойство src
тега img
на это действие контроллера:
<img src="@Url.Action("Index", "Images", new { id = Model.Id })" />
Ответ 2
Один из способов - добавить это в новый класс С# или класс htmlExtensionsclass
public static class HtmlExtensions
{
public static MvcHtmlString Image(this HtmlHelper html, byte[] image)
{
var img = String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(image));
return new MvcHtmlString("<img src='" + img + "' />");
}
}
то вы можете сделать это в любом представлении
@Html.Image(Model.MyImageBytes)