我正在项目中使用
我建议两种方案:
1. 将BLOB对象保存到数据库中/从数据库中加载 2. 将文件保存到/从文件夹中,并在表格中保存有关文件的信息以识别所有者,表格设计如下:BNF:
至于将文件存储在文件系统上,我只看到一个问题:
谢谢!
FileUpload
。由于该网络应用程序需要与支付系统一起工作,因此将会面临高负载。我想知道,对于存储用户文件来说哪种方式更好呢?我的项目基于ASP.NET。我建议两种方案:
1. 将BLOB对象保存到数据库中/从数据库中加载 2. 将文件保存到/从文件夹中,并在表格中保存有关文件的信息以识别所有者,表格设计如下:BNF:
<user_files> ::= ( <id ::= int, primary_key, auto_increment, indexed><user_id ::= int><file_guid ::= varchar(255)>) | nil
我更喜欢BLOB,但担心未来的高负载。因为从数据库中提取数据需要更多的CPU时间和内存分配,原因如下:
- 我需要使用连接器,它将打开一个新套接字以连接到DB本地主机
- 然后必须调用存储过程来获取BLOB对象
- 在客户端,我必须从连接器的某些类中获取结果
- 我必须反序列化它
- 然后才能以未压缩和未损坏的状态向用户发送文件,以便用户以后可以在某个编辑器中打开它(文件通常是图像和MS Office文档)
至于将文件存储在文件系统上,我只看到一个问题:
- 正确保护文件的访问权限,因为不同的用户不能看到其他用户的文档,而且它们必须对其他用户隐藏。我担心,因为用户上传文件的文件夹对于IIS的Windows系统用户(IISUser...)是可见的,否则用户将无法上传任何东西,因此该文件夹将成为公共的。我唯一看到的解决方案是创建一个Windows服务,并使用IIS文件夹进行上传作为临时文件夹。 Windows服务将从中获取文件并将其放置到安全文件夹中,Web用户将无法看到它。
谢谢!
System.IO.Path.Combine(Server.MapPath("uploads")
的方法,如果不使用Server命名空间,将会出现保存在服务器文件夹之外的异常,因此它将在任何情况下都保存在IIS文件夹中,因为ASP.NET项目托管在IIS上,并且不能看到比IIS更低级别的文件夹。 - Secret