asp.net 核心 2 从本地磁盘驱动器加载和显示图像
asp.net core 2 load and display images from local disk drive
有什么方法可以从本地驱动器在 asp.net core 2 (razor) web 应用程序中显示图像?
我想要这样做的原因是我正在开发一个游戏服务器,其中包含一个游戏服务器和两个网站(前端和一个管理面板),所有这些都需要访问提到的图像,在这种情况下是个人资料图像这就是为什么我没有将这些图像放在 wwwroot 文件夹中的原因。
示例图片地址:"C:\game_data\avatars\default.png"
在大多数情况下,最安全(也是最简单)的选择是将图像存储在站点的根文件夹下,以避免在站点文件夹本身之外为网站帐户提供访问权限。
虽然用户个人资料图片不是 静态的。这就是为什么它们通常存储在数据库或其他存储中的原因。
您可以将特定请求路径映射到 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"
});
}
更好的选择是从配置文件加载位置。
另一个考虑因素是,只要将文件夹映射到一个路径,任何人都可以阅读个人资料图片,前提是他们可以猜出他们的名字。这可能是也可能不是问题。
如果它 是 ,您使用的控制器仅 returns 当前用户作为 FileResult,例如:
class AvatarsController
{
[HttpGet]
public async Task<IActionResult> Get()
{
var userID=SomehowFindTheCurrentUserID();
var avatarPath= Path.Combine(_avatarRoot,$"{userID}.jpeg");
return File(avatarPath, "image/jpeg");
}
}
在启动时添加以下代码 class,而不是图像,设置您的文件夹:
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "images")),
RequestPath = "/images"
});
有什么方法可以从本地驱动器在 asp.net core 2 (razor) web 应用程序中显示图像?
我想要这样做的原因是我正在开发一个游戏服务器,其中包含一个游戏服务器和两个网站(前端和一个管理面板),所有这些都需要访问提到的图像,在这种情况下是个人资料图像这就是为什么我没有将这些图像放在 wwwroot 文件夹中的原因。
示例图片地址:"C:\game_data\avatars\default.png"
在大多数情况下,最安全(也是最简单)的选择是将图像存储在站点的根文件夹下,以避免在站点文件夹本身之外为网站帐户提供访问权限。
虽然用户个人资料图片不是 静态的。这就是为什么它们通常存储在数据库或其他存储中的原因。
您可以将特定请求路径映射到 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"
});
}
更好的选择是从配置文件加载位置。
另一个考虑因素是,只要将文件夹映射到一个路径,任何人都可以阅读个人资料图片,前提是他们可以猜出他们的名字。这可能是也可能不是问题。
如果它 是 ,您使用的控制器仅 returns 当前用户作为 FileResult,例如:
class AvatarsController
{
[HttpGet]
public async Task<IActionResult> Get()
{
var userID=SomehowFindTheCurrentUserID();
var avatarPath= Path.Combine(_avatarRoot,$"{userID}.jpeg");
return File(avatarPath, "image/jpeg");
}
}
在启动时添加以下代码 class,而不是图像,设置您的文件夹:
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "images")),
RequestPath = "/images"
});