Sha*_*yar 3 c# asp.net-core asp.net-core-2.0 razor-pages asp.net-core-2.2
有什么方法可以从本地驱动器在 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"
});
}
Run Code Online (Sandbox Code Playgroud)
第一次调用配置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"
});
}
Run Code Online (Sandbox Code Playgroud)
更好的选择是从配置文件加载位置。
另一个考虑因素是,简单地将文件夹映射到路径将允许任何人读取个人资料图片(如果他们能猜出他们的名字)。这可能是也可能不是一个问题。
如果是,您使用的控制器仅返回当前用户的 FileResult,例如:
class AvatarsController
{
[HttpGet]
public async Task<IActionResult> Get()
{
var userID=SomehowFindTheCurrentUserID();
var avatarPath= Path.Combine(_avatarRoot,$"{userID}.jpeg");
return File(avatarPath, "image/jpeg");
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11882 次 |
| 最近记录: |