C# 在Web服务器ASP Net Core/Angular上保存私有映像的最佳做法

C# 在Web服务器ASP Net Core/Angular上保存私有映像的最佳做法,c#,angular,asp.net-core,.net-core,asp.net-core-mvc,C#,Angular,Asp.net Core,.net Core,Asp.net Core Mvc,在我的Angular应用程序中,用户可以注册/登录并上载私人图像。上传后,这些图像立即显示在公式中。 目前,图像存储在一个文件夹中 string imageDictionary=$“{HostingEnvironment.WebRootPath}\\{User.Identity.Name}\\UploadFiles\\” 文件夹和图像名称存储在数据库中 确保图像只能由用户访问的最佳方法是什么? 目前,如果已知链接,则可以调用图像 如果我禁用目录浏览并给图像一个随机创建的名称,这就足够了吗 我用于

在我的Angular应用程序中,用户可以注册/登录并上载私人图像。上传后,这些图像立即显示在公式中。 目前,图像存储在一个文件夹中

string imageDictionary=$“{HostingEnvironment.WebRootPath}\\{User.Identity.Name}\\UploadFiles\\”

文件夹和图像名称存储在数据库中

确保图像只能由用户访问的最佳方法是什么? 目前,如果已知链接,则可以调用图像

如果我禁用目录浏览并给图像一个随机创建的名称,这就足够了吗


我用于后端ASP Net Core和前端Angular version 7。

我建议您使用Azure Blob存储,因为它已经有了安全保护


如果要将文件存储在wwwroot文件夹中,则需要添加中间件以检查用户权限,然后再让他们查看文件,因为wwwroot文件夹是每个人都可以访问的公用文件夹

您可以创建一个具有用户id的文件夹,并将其保存在其中。但您仍然需要检查请求的id是否与登录用户的id匹配。我的目标是,如何实现其他用户无法访问图像。当我创建一个随机文件夹名和一个随机文件名时,它是否足够保存?从理论上讲,当用户猜测到文件夹和图像的链接时,他可以在浏览器中打开该图像。您可以随机创建足够多的链接以防止猜测(尽管已知链接仍然可以共享),或者动态地(通过控制器动作)提供文件这将允许您使用完全授权功能来保护资源。然后,您还可以将这些文件存储在数据库中,而不是将其写入磁盘。如果不想将这些文件存储在数据库中,唯一的方法是将图像隐藏在随机创建的文件夹名称后面?如果您将图像存储在webroot之外,并在用户登录时将文件复制到webroot中,该怎么办。当用户注销或令牌过期后,文件夹和文件中的图像将被删除。不,您不必将它们存储在数据库中(我只是建议现在可以这样做)。您还可以将它们存储在web根目录之外,并让动态文件处理程序从外部访问该文件。但你不应该复制或移动文件。