Получить путь к файлу образа на главном сервере Azure Asp.Net (в контроллере)

Я знаю, что это, вероятно, простая задача, но сейчас я безуспешно пробовал несколько подходов. У меня есть контроллер с именем AuthorizeController.cs. Внутри этого контроллера я хотел бы указать изображение аватара по умолчанию для зарегистрированных пользователей.

Я делаю так в конструкторе:

  private IWebHostEnvironment WebHostEnvironment { get; }
  private byte[] ProfilePicture { get; set; }

  this.ProfilePicture = System.IO.File.ReadAllBytes(
    string.Concat(this.WebHostEnvironment.WebRootPath, @"\Resources\avatar.png"));

Мое изображение находится внутри того же проекта:

MrDashWeb.Server
 - Resources
    - avatar.png 

На моем локальном компьютере, когда я запускаю его на локальном хосте, все работает нормально. Однако после загрузки в Azure я получаю сообщения об ошибках в Log Stream:

If the exception handler is expected to return 404 status responses then set AllowStatusCode404Response to true.---> System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Resources\avatar.png'.at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)

Что я делаю не так и как это исправить?

1. Используйте Path.Combine вместо string.Concat. 2. Убедитесь, что путь и файл существуют на сервере. 3. Убедитесь, что путь разрешен правильно. Он показывает "C:\Resources\avatar.png", это правильно? Это будет означать, что ваш WebRootPath — «C:»? Звучит подозрительно.

Fildor 07.04.2022 15:53

@Fildor, есть ли какие-нибудь руководства, как я могу увидеть свои файлы в Azure? Я как раз настраивал свой первый проект, ты ...

LG3 07.04.2022 15:56

Итак, вы размещаетесь в Azure. Тогда должен будет страницей портала для просмотра файлов. Сам пока не могу посмотреть...

Fildor 07.04.2022 16:03

@LG3 LG3 Вы должны иметь возможность использовать что-то вроде Kudu или Filezilla для подключения к вашему серверу, чтобы проверить, существует ли файл. Прежде всего, вы должны проверить, настроено ли копирование этого файла в выходной каталог. Вы можете сделать это, щелкнув правой кнопкой мыши файл в своей среде IDE -> Свойства -> Копировать в выходной каталог -> должно быть установлено значение «Копировать всегда».

Paweł Wąsowski 07.04.2022 17:41

Это был этот this.ProfilePicture = System.IO.File.ReadAllBytes(Path.Combine(this.WebHostEnviron‌​ment.WebRootPath, "images", "avatar.png"));

LG3 07.04.2022 18:26
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста, создайте интерфейс ниже, чтобы получить WebRootPath. Значение WebRootPath должно быть D:\home\site\wwwroot\wwwroot

ПроверитьПуть():

public string CheckWebRootPath()
{
    string wwwPath = _webHostEnvironment.WebRootPath;
    return wwwPath;  
}

Результат испытаний:

Я также тестирую ваш код, как показано ниже, и я думаю, что ваш код правильный.

public string CheckFile()
{
   string wwwPath = _webHostEnvironment.WebRootPath;
   var ProfilePicture= System.IO.File.ReadAllBytes(
          string.Concat(wwwPath, @"\Resources\avatar.png"));
   return ProfilePicture.Length.ToString();
}

Предположение

  1. Проверьте значение WebRootPath. Если значение равно C:/, повторно создайте новое веб-приложение на портале Azure.

  2. Если имя вашего веб-приложения — testapp, URL-адрес веб-приложения должен быть

    https://testapp.azurewebsites.net
    

    Затем вы можете проверить свой файл по ссылке ниже

    https://testapp.scm.azurewebsites.net
    

Другие вопросы по теме