Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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# 如何在IIS Web服务器上使用MVC.NET存储用户上载的文件?_C#_Asp.net Mvc_Iis_File Upload_Database Design - Fatal编程技术网

C# 如何在IIS Web服务器上使用MVC.NET存储用户上载的文件?

C# 如何在IIS Web服务器上使用MVC.NET存储用户上载的文件?,c#,asp.net-mvc,iis,file-upload,database-design,C#,Asp.net Mvc,Iis,File Upload,Database Design,我们正在开发一个教育网站,允许用户(教师和学生)上传文件(.pdf、.docx、.png和…)。我们在这方面没有任何经验,希望确保我们在存储和索引这些文件方面做得正确。我们希望有一个能够很好地扩展到高数据量的体系结构。 目前,我们将文件路径存储在数据库中,如下所示(Nvarchar(MAX)): 我们使用下面的代码来保存和检索文件: //save: file.SaveAs(Server.MapPath("~/Files/UserPhotos/") + fileName); //r

我们正在开发一个教育网站,允许用户(教师和学生)上传文件(.pdf、.docx、.png和…)。我们在这方面没有任何经验,希望确保我们在存储和索引这些文件方面做得正确。我们希望有一个能够很好地扩展到高数据量的体系结构。
目前,我们将文件路径存储在数据库中,如下所示(
Nvarchar(MAX)
):

我们使用下面的代码来保存和检索文件:

  //save:
 file.SaveAs(Server.MapPath("~/Files/UserPhotos/") + fileName);    
 //retrieve:
<img alt="" src="@Url.Content(Model.FilePath)">  
//保存:
file.SaveAs(Server.MapPath(“~/Files/UserPhotos/”)+文件名);
//检索:
现在我们的问题是:

  • 我们是否朝着一个好的方向前进
  • 我们应该将文件保存在根目录还是虚拟目录中
  • 假设我们的服务器有1 TB的存储空间,在存储了1 TB的数据后,如果我们添加了一个额外的硬盘驱动器,我们应该如何管理更改
  • 我们搜索了很多,但没有找到任何关于正确架构的好教程或指南。

    对不起,我的英语不好。

    1.我通常用以下方式保存文件:

    file.SaveAs(Server.MapPath("/Files/UserPhotos/") + fileName); 
    

    2.最好将其保存在虚拟目录中,这样,当您的文件夹中有太多文件时,您可以将文件文件夹移动到新的额外硬盘,并在IIS中更改虚拟目录的路径。

    在理想情况下,您将使用云存储,如Azure Blob存储,如果这不是一个选项,那么我要做的就是创建一个单独的web服务,专门处理上传的文件和文件存储

    通过创建一个单独的web服务来管理文件存储,您将隔离您的问题,此服务可以监视硬盘存储空间,并在上载文档时平衡它们,将来如果您添加其他服务器。。。你已经把你的服务分开了,这样就不会像你不分开时那样一团糟

    上传文件时,您可以索引SQL数据存储中的所有内容。你的问题实际上比我刚才提到的要复杂得多

    另一个需要注意的问题是,如果或当其中一个硬盘发生故障时,游戏计划!如果硬盘没有RAID 1配置,您的可用性将下降到NADA

    队列问题编号2。。。可用性!=备份。。。你需要考虑你的游戏计划,你打算如何备份系统,多久,在一天中的什么时间,等等。你拥有的数据越多,这就越难


    这就是为什么每个人都转向Azure/AWS等的原因。。。你不必再为这些事情担心了……/P>你可能想考虑某种类型的“云”存储。这些都非常简单,可以集成到MVC应用程序中,并且还有一个额外的好处,即如果您的网站的多个实例托管在不同的服务器上,那么所有实例都可以访问共享存储。正如@darth_Phoenix提到的,azure和Amazon等云服务将是一个比本地存储更好、更可扩展的解决方案。如果您确认教师和学生将上传大量文件(繁重的文件),那么您也可以考虑将此任务卸载到单独的上传服务/队列,这将减轻您的应用程序服务器的负载。@darth_Phoenix Azure Blob存储在我的国家不可访问……您的意思是在您的国家没有数据中心吗?不,我住在伊朗,因为对我国的制裁,我们无法使用这些服务:)荒谬!我本以为最近取消制裁会允许。。。我认为你应该给Azure销售发送一封电子邮件,他们可能很快就会接受伊朗,你永远不知道。。。
    file.SaveAs(Server.MapPath("/Files/UserPhotos/") + fileName);