asp.net 核心 2 从本地磁盘驱动器加载和显示图像




有没有办法从本地驱动器在 asp.net 核 2(剃刀)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_dataavatars"),
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");
}
} 

在启动类中添加以下代码,而不是图像,设置您的文件夹:

app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "images")),
RequestPath = "/images"
});

最新更新