В большинстве случаев самым безопасным (и самым простым) вариантом является хранение изображений в корневой папке сайта, чтобы избежать предоставления учетной записи веб-сайта доступа вне самой папки сайта.
Изображения профиля пользователя не являются статичными . Вот почему они часто хранятся в базе данных или другом хранилище.
Вы можете сопоставить конкретный путь запроса с пользовательским местоположением в UseStaticFiles . Из примера документации:
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles(); // For the wwwroot folder
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
RequestPath = "/StaticFiles"
});
}
Первый вызов настраивает wwwroot
в качестве корня для статических файлов. Второй вызов отменяет это для запросов, начинающихся с /StaticFiles
, и указывает на папку с именем MyStaticFiles
в папке приложения.
Вы можете выставить все изображения профиля в пути avatar
с этим кодом:
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles(); // For the wwwroot folder
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
"X:\game_data\avatars\"),
RequestPath = "/avatars"
});
}
Лучшим вариантом было бы загрузить местоположение из файла конфигурации.
Другое соображение заключается в том, что простое сопоставление папки с путем позволит любому прочитать изображения профиля, если они смогут угадать свое имя. Это может или не может быть проблемой.
Если равно , вы используете контроллер, который возвращает текущего пользователя только в качестве FileResult, например:
class AvatarsController
{
[HttpGet]
public async Task<IActionResult> Get()
{
var userID=SomehowFindTheCurrentUserID();
var avatarPath= Path.Combine(_avatarRoot,$"{userID}.jpeg");
return File(avatarPath, "image/jpeg");
}
}