Я думаю, вы можете попробовать метод WebClient.DownloadData()
, чтобы загрузить изображение в виде байтового массива из указанного URI, затем преобразовать его в формат Base64 с помощью Convert.ToBase64String()
и отобразить его в теге <img>
, используя строкусвойство в viewmodel как src
значение атрибута, ниже приведен пример для отображения изображения:
Пример Viewmodel
public class ViewModel
{
// other properties
// used to pass image into src attribute of img tag
public string ImageData { get; set; }
}
Действие контроллера
public ActionResult Display(string resourcePath)
{
Uri uri = new Uri("pack://application:,,,/ProjectName;component/Images/Vectors/" + resourcePath, UriKind.Absolute);
using (var wc = new System.Net.WebClient())
{
// download URI resource as byte array
byte[] image = wc.DownloadData(uri);
// get image extension
string path = string.Format("{0}{1}{2}{3}", uri.Scheme, Uri.SchemeDelimiter, uri.Authority, uri.AbsolutePath);
string extension = System.IO.Path.GetExtension(path).Replace(".", "");
// assign image to viewmodel property as Base64 string format
var model = new ViewModel();
model.ImageData = string.Format("data:image/{0};base64,{1}", extension, Convert.ToBase64String(image));
return View(model);
}
}
Просмотр
@model ViewModel
<img src="@Model.ImageData" ... />
Дополнительные примечания:
Если вы уже знаете расширение из ресурсаURI, вы можете использовать его напрямую вместо Path.GetExtension
, вот пример для формата JPG:
model.ImageData = string.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(image));
Проблемы, связанные с:
Изображение в байтовом массиве из URL
MVC Как отобразить изображение массива байтов из модели