Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在哪里存储用户上传的文件?_C#_Asp.net Mvc_Asp.net Core_File Upload_Authorization - Fatal编程技术网

C# 在哪里存储用户上传的文件?

C# 在哪里存储用户上传的文件?,c#,asp.net-mvc,asp.net-core,file-upload,authorization,C#,Asp.net Mvc,Asp.net Core,File Upload,Authorization,故事:用户可以上传个人档案(pdf),比如他的简历。他需要能够查看上传的文件。我知道数据库速度会变慢,所以我想将文件存储在文件系统中。但是我应该将文件存储在哪里,这样它才是安全的,其他用户无法访问它。我应该在项目/解决方案中创建一个目录,还是在项目外部创建一个目录。或者我应该将其全部存储在WWWROOT中。有人能给我一些建议吗 我有一个ASP.NET核心mvc应用程序。我想在数据库中存储文件名和路径。上传的文件需要存储在文件系统中 您可以存储在wwwroot中,让每个人都可以访问它或自定义文件夹

故事:用户可以上传个人档案(pdf),比如他的简历。他需要能够查看上传的文件。我知道数据库速度会变慢,所以我想将文件存储在文件系统中。但是我应该将文件存储在哪里,这样它才是安全的,其他用户无法访问它。我应该在项目/解决方案中创建一个目录,还是在项目外部创建一个目录。或者我应该将其全部存储在WWWROOT中。有人能给我一些建议吗


我有一个ASP.NET核心mvc应用程序。我想在数据库中存储文件名和路径。上传的文件需要存储在文件系统中

您可以存储在wwwroot中,让每个人都可以访问它或自定义文件夹

考虑到安全问题,您可以检查用户角色或添加一些中间件来限制用户对该文件夹的访问

或使用

静态文件中间件不提供授权检查。任何 它提供的文件,包括wwwroot下的文件,是公开的 可到达的要根据授权提供文件,请执行以下操作:

将它们存储在wwwroot和用户可访问的任何目录之外 静态文件中间件

通过应用授权的操作方法为他们提供服务。 返回FileResult对象


这是基于一个观点,但您可以将其存储在wwwroot或一些云存储中。最好将文件保存在wwwroot之外。您也可以使用其他用户无法访问的网络路径。您在哪里托管您的网站?AWS?谷歌可以吗?Azure?@AA为什么在wwwroot之外保存它更好?wwwroot是否每个人都可以访问?@HoomanBahreini asp.net mvc应用程序尚未托管。一些公司会做托管。将文件存储在WebsiteRoot(www)下是一个简单的解决方案,但在将来会导致问题。例如,当两台web服务器在负载平衡器后面运行时,如何同步此文件夹?这对性能也有负面影响,因为网站负责提供文件。是的。在这种情况下,我们应该使用azure blob storageWait之类的云提供商,因此我应该选择wwwroot之外的目录?这取决于您需要什么,但正如我现在看到的,您只使用wwwroot存储文件,所以我认为您现在可以使用wwwroot。我同意,对于开发环境,您可以不使用wwwroot,但是,当您投入生产时,您可能希望使用托管提供商提供的存储系统。
[Authorize]
public IActionResult BannerImage()
{
    var file = Path.Combine(Directory.GetCurrentDirectory(), 
                            "MyStaticFiles", "images", "banner1.svg");

    return PhysicalFile(file, "image/svg+xml");
}