Изображение Ресурса Доступа MVC - PullRequest
0 голосов
/ 21 марта 2019

Я хочу получить доступ и вернуть образ ресурса из DLL / подключенного проекта.

(Это файл с действием сборки Resource). Он не указан в свойствах / ресурсах, так как в папке их сотни.

Идея состоит в том, что я могу вызвать контроллер изображения.

public ImageResult Display(string resourcePath){
     Uri uri = new Uri("pack://application:,,,/ProjectName;component/Images/Vectors/" + resourcePath, UriKind.Absolute);

     // What goes here??
}

Проблема в том, что я не знаю, как превратить URI в изображение в MVC5.

Я хочу, чтобы это можно было вызвать с точки зрения. используя свойство url тега <img>

1 Ответ

0 голосов
/ 25 марта 2019

Я думаю, вы можете попробовать метод 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 Как отобразить изображение массива байтов из модели

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...