有什么方法可以显示来自本地驱动器的asp.net core 2(剃刀)Web应用程序中的图像?
我要这样做的原因是,我正在开发一个游戏服务器,其中包含一个游戏服务器和两个网站(前端和管理面板),所有这些都需要访问所提到的图像,在这种情况下,这些图像是个人资料图像这就是为什么我没有将这些图像放在wwwroot文件夹中的原因。
示例图片地址:“ C:\ game_data \ avatars \ default.png”
答案 0 :(得分:2)
在大多数情况下,最安全(也是最简单)的选择是将图像存储在站点的根文件夹下,以避免使网站的帐户访问权限超出站点文件夹本身。
用户个人资料图片不是静态。这就是为什么它们通常存储在数据库或其他存储中的原因。
您可以将特定的请求路径映射到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");
}
}
答案 1 :(得分:0)
实际上,您可以在IIS服务器中的Web服务器上托管一个文件夹“图像”(例如 )。您可以通过网址在任何地方访问图像,
http[s]://<ServerDomainName>/images/<YourFileName.Ext>
实际上,w3c不建议引用本地路径。这就是为什么Google Chrome和其他现代浏览器无法记住使用来上传文件的实际位置,
<input type="file" />
它可以解决您的问题吗?
答案 2 :(得分:0)
在启动类中添加以下代码,而不是图像,设置文件夹:
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "images")),
RequestPath = "/images"
});