【发布时间】:2013-05-03 02:07:08
【问题描述】:
我在我的项目中使用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 服务将从它获取文件并放置到安全文件夹中,网络用户将无法在该文件夹中看到它。
但是,也许,我的想法有问题,这就是为什么我要问你一个建议,因为我想让系统更完美。
谢谢!
【问题讨论】:
标签: asp.net security database-design file-upload blob