Как вернуть изображение с wwwroot? - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь вернуть изображение, хранящееся в папке wwwwroot/images, это структура:

enter image description here

Внутри View Iиметь следующий тег:

<img src="@Url.Action("GetAvatar", "User", new { username = User.Identity.Name })" />

, как вы можете видеть для отображения изображения, он просто вызывает GetAvatar метод из User контроллера, передавая имя пользователя в качестве параметра.

Метод имеетследующая конфигурация:

[HttpGet]
public FileResult GetAvatar(string username)
{
   User user = _repo.GetUser(username);

   if(user.UserDetail != null)
      return File(user.UserDetail?.UserPhoto, "image/png");

   //The user has no custom image, will displayed the default.
   string root = Path.Combine(_env.WebRootPath, "images");

   return File(Path.Combine(root, "avatar_default.png"), "image/png");
}

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

Мне также вводят IHostingEnvironment для доступа к папке wwwroot.

Есть идеи?

1 Ответ

0 голосов
/ 19 октября 2018

Используемый метод File имеет следующую подпись:

public VirtualFileResult File (string virtualPath, string contentType);

Как следует из его названия, первый параметр здесь представляет virtual путь к нужному файлуслужить;не физический путь.По умолчанию это означает, что вам нужно указать путь, который по сути просто относительно к папке wwwroot.В вашем примере путь будет images/avatar_default.png.При этом вам не понадобится Path.Combine или IHostingEnvironment в вашем примере.Вот обновленная версия:

[HttpGet]
public FileResult GetAvatar(string username)
{
   User user = _repo.GetUser(username);

   if(user.UserDetail != null)
      return File(user.UserDetail?.UserPhoto, "image/png");

   return File("images/avatar_default.png", "image/png");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...