Я знаю, что это, вероятно, простая задача, но сейчас я безуспешно пробовал несколько подходов. У меня есть контроллер с именем 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)
Что я делаю не так и как это исправить?
@Fildor, есть ли какие-нибудь руководства, как я могу увидеть свои файлы в Azure? Я как раз настраивал свой первый проект, ты ...
Итак, вы размещаетесь в Azure. Тогда должен будет страницей портала для просмотра файлов. Сам пока не могу посмотреть...
@LG3 LG3 Вы должны иметь возможность использовать что-то вроде Kudu или Filezilla для подключения к вашему серверу, чтобы проверить, существует ли файл. Прежде всего, вы должны проверить, настроено ли копирование этого файла в выходной каталог. Вы можете сделать это, щелкнув правой кнопкой мыши файл в своей среде IDE -> Свойства -> Копировать в выходной каталог -> должно быть установлено значение «Копировать всегда».
Это был этот this.ProfilePicture = System.IO.File.ReadAllBytes(Path.Combine(this.WebHostEnvironment.WebRootPath, "images", "avatar.png"));
Пожалуйста, создайте интерфейс ниже, чтобы получить 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();
}
Проверьте значение WebRootPath. Если значение равно C:/
, повторно создайте новое веб-приложение на портале Azure.
Если имя вашего веб-приложения — testapp, URL-адрес веб-приложения должен быть
https://testapp.azurewebsites.net
Затем вы можете проверить свой файл по ссылке ниже
https://testapp.scm.azurewebsites.net
1. Используйте Path.Combine вместо string.Concat. 2. Убедитесь, что путь и файл существуют на сервере. 3. Убедитесь, что путь разрешен правильно. Он показывает "C:\Resources\avatar.png", это правильно? Это будет означать, что ваш WebRootPath — «C:»? Звучит подозрительно.