我正在FileUpload
我的项目中使用。而且这个项目的访问量会很高(这不是我的野心,只是因为 Web 应用程序确实与支付系统一起工作,这就是为什么它会处于高负载状态)。我想知道,存储用户文件有什么更好的方法?我的项目基于ASP.NET。
我建议两种变体:
- 将BLOB对象另存为/加载到/从数据库中
- 保存/加载到/从文件将找到的文件夹并保存有关表中文件的信息以供所有者识别, BNF中的表设计:
<user_files> ::= ( <id ::= int, primary_key, auto_increment, indexed><user_id ::= int><file_guid ::= varchar(255)>) | nil
我更喜欢BLOB,但害怕未来的高负载。因为,从数据库中获取数据需要更多的 CPU 时间和内存分配,因为:
- 我需要使用一个连接器,它将打开一个新的套接字来连接到 DB localhost
- 然后必须调用存储过程来获取 BLOB 对象
- 在客户端,我必须从连接器的某些类中获取结果
- 我必须反序列化它
- 然后只是将文件以未压缩且未损坏的状态发送给用户,以便用户稍后可以在某些编辑器中打开它(文件通常是图像和 ms-office 文档)
由于我认为所有这些操作可能会减少服务器工作并且需要更多时间,我认为对于 2000 个在线用户来说会很慢,这将非常快速地交换文件
至于文件系统上的存储文件,我只看到以下问题:
- 正确保护文件的访问,因为不同的用户不能看到其他文档,并且必须为其他用户隐藏它们。恐怕,因为 IIS 的 Windows 系统用户(IISUser ...)可以看到用户上传文件的文件夹,否则用户将无法上传任何内容,因此该文件夹将是公共的. 我只看到了制作 Windows 服务并将 IIS 文件夹用于临时上传的解决方案。Windows 服务将从它获取文件并放置到安全文件夹中,Web 用户将无法在该文件夹中看到它。
但是,也许,我的想法有问题,这就是为什么我要问你一个建议,因为我想让系统更完美。
谢谢!