C# 在asp.net MVC 4 webapp中,用户上传的文件存储在何处?

C# 在asp.net MVC 4 webapp中,用户上传的文件存储在何处?,c#,sql-server,asp.net-mvc-4,storage,C#,Sql Server,Asp.net Mvc 4,Storage,我正在使用独立的数据库多租户体系结构构建一个MVC4应用程序。 客户还可以选择上传文件(主要是1-5MB大小的文本文件/文档) 我得出的结论是,最好将文件存储在文件系统中,同时将元数据保存在数据库中(每个客户有一个单独的文件夹),但是,我不知道将文件存储在哪里。MVC对此有特殊的位置吗?或者我应该在服务器上的某个地方创建一个文件夹 默认情况下创建这样的文件夹安全吗 谢谢 我个人认为,这样的决定应该基于您的应用需求 当我构建具有上传可能性的简单应用程序时,我总是使用DB=Metadata;文件本身

我正在使用独立的数据库多租户体系结构构建一个MVC4应用程序。 客户还可以选择上传文件(主要是1-5MB大小的文本文件/文档)

我得出的结论是,最好将文件存储在文件系统中,同时将元数据保存在数据库中(每个客户有一个单独的文件夹),但是,我不知道将文件存储在哪里。MVC对此有特殊的位置吗?或者我应该在服务器上的某个地方创建一个文件夹

默认情况下创建这样的文件夹安全吗


谢谢

我个人认为,这样的决定应该基于您的应用需求

当我构建具有上传可能性的简单应用程序时,我总是使用DB=Metadata;文件本身=文件系统,因为我有一个模块,我实现了每一个应用程序,像这样,这是一种易于维护的方法。它可能会带来安全问题,特别是在多用户/应用程序访问服务器上,其中“文件夹访问”的安全性应该在根文件夹级别上维护,并严格定义权限(不是chmod 777 everyone:-)。到目前为止,我还没有遇到过这种方法的任何问题。外部访问由特定文件的外部guid链接

对于多租户环境,我的文件数据库(或我称之为媒体数据库)也包含CDN url,即物理承载该文件的服务器的地址,该文件由HttpHandler提供服务。同样,我可以想象更安全、更灵活的方式,但到目前为止,这从未让我失望过,我意识到与此解决方案相比它存在的问题,我对此很满意


但是,由于这对我来说是一个有趣的话题,我很想听听是否有人提出了不同的解决方案,当涉及到文件存储时。

好吧,我想为以下几点提供建议,Gitzerai已经给出了很多考虑

Gitzerai也许你会在这里发现一些你在创建应用程序解决方案时遗漏的东西

反正

您可以在文件系统上上载文件,但有几件事需要注意

  • 确保运行IIS应用程序池的帐户仅对该文件夹具有读写权限,并且在任何情况下都不会执行

  • 检查文件扩展名,不允许文件扩展名和可执行文件(.exe、.dll等)

  • 存储不带扩展名或带有一些.zzz扩展名的文件以防万一。当用户需要下载文件时,可以动态设置为原始扩展名

  • 仅使用一个文件夹存储手动创建的所有文件。如果不是真的需要,请避免动态创建多个文件夹

  • 创建一个单独的应用程序,偶尔对数据库中的记录和文件系统中的文件进行完整性检查