在asp.net MVC 4 webapp中存储用户上传文件的位置?

时间:2013-10-16 11:33:52

标签: c# sql-server asp.net-mvc-4 storage

我使用单独的数据库多租户架构构建MVC4应用程序。 客户还可以选择上传文件(大多数为1-5MB,文本文件/文档)。

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

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

谢谢!

2 个答案:

答案 0 :(得分:10)

嗯,我想建议以下内容,Gitzerai已经考虑了很多。

Gitzerai也许你会在这里找到你在创建应用程序解决方案时错过的东西。

反正

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

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

  • 检查文件扩展名和禁止和可执行文件(.exe,.dll等)

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

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

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

答案 1 :(得分:5)

就个人而言,我会说这样的决定应该基于您的申请要求。

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

对于多租户环境,我的文件数据库(或我称之为媒体数据库)也包含CDN URL,即物理托管文件的服务器地址,文件由HttpHandler提供。再一次,我可以想象更安全和灵活的方式,但到目前为止,这一直没有让我失望,我知道它与这个解决方案相关的问题,我很好。

但是因为这对我来说是一个有趣的话题,所以我很想听听有人在文件存储时提出不同的解决方案。