在 MVC 4 Web 应用中存储用户上传文件的位置 asp.net
本文关键字:文件 位置 net asp 用户 MVC Web 应用 存储 | 更新日期: 2023-09-27 18:35:31
我使用单独的数据库多租户体系结构构建 MVC4 应用。客户还可以选择上传文件(大部分大小为1-5MB,文本文件/文档)。
我得出的结论是,最好将文件存储在文件系统中,同时将元数据保存在数据库中(每个客户都有单独的文件夹),但是,我不知道在哪里存储文件。MVC有特殊的位置吗?或者我应该在服务器上的某个地方创建一个文件夹。
默认情况下创建这样的文件夹是否安全?
谢谢!
好吧,我想建议以下几点,Gitzerai 已经考虑了很多。
Gitzerai 也许您会在这里找到在为您的应用程序创建解决方案时错过的东西。
无论如何
您可以在文件系统上上传文件,但有几件事需要注意。
-
确保运行 IIS 应用程序池的帐户仅对该文件夹具有读写权限,并且在任何情况下都不执行
-
检查文件扩展名和禁止以及可执行文件(.exe、.dll等)
-
存储不带扩展名或带有某些.zzz扩展名的文件以防万一。当用户需要下载文件时,可以动态设置为原始扩展名
-
仅使用一个文件夹来存储手动创建的所有文件。如果不是真的需要,请避免动态创建多个文件夹
-
创建一个单独的应用,该应用偶尔会对数据库中的记录与文件系统中的文件进行完整性检查
就我个人而言,我认为这样的决定应该基于您的应用程序要求。
当我构建具有上传可能性的简单应用程序时,我总是使用 DB = 元数据;文件本身=文件系统,因为我有一个模块,我为每个这样的应用程序实现,这是一种易于维护的方法。它可能会带来安全问题,尤其是对于多用户/应用程序访问服务器,其中"文件夹访问"的安全性应该在根文件夹级别维护,并严格定义权限(不是 chmod 777 每个人 :-)) 到目前为止,我对这种方法没有任何问题。外部访问通过特定文件的外部 GUID 链接。
对于多租户环境,我的文件数据库(或我称之为媒体数据库)还包含CDN URL,即物理托管文件的服务器的地址,并且该文件由HttpHandler提供。同样,我可以想象更安全和灵活的方式,但到目前为止,这从未让我失望过,而且我知道它伴随着这个解决方案的问题,我对此很好。
但是由于这对我来说是一个有趣的话题,我很想听听是否有人在文件存储方面提出不同的解决方案。