【发布时间】:2016-07-16 16:49:23
【问题描述】:
我正在使用 C# 在 ASP.NET 中开发文档管理系统。我将所有文件夹和文件存储在 Windows 服务器上,并将文件夹和文件信息也保存在 SQL 数据库中。每次,我在服务器上创建一个文件夹或文件,我都会从数据库中附加具有唯一 ID 的名称。示例:contact~432cace7-a39c-4db5-a38f-9efe5d289bbf.pdf
现在我们有不同的用户可以访问相同的文件夹,并且需要一种根据他们的访问权限删除和下载的方法。
示例:我有 2 个用户,用户 1 和用户 2。我有一个包含 2 个文件的文件夹 1。 file-1 由 user-1 上传,file-2 由 user-2 上传。现在,当用户 1 在浏览器页面中查看文件时,我会根据数据库查询显示文件夹 1 和该文件 1。但是,如果用户选择文件夹 1 进行下载,它将转到 Windows 服务器并下载文件 1 和文件 2,因为它们在物理上位于服务器上的同一文件夹中。删除也是如此。
我该如何处理这种情况?
基本上,使用关系数据库在 SQL 中处理要容易得多,但我在想如何在 Windows 服务器上有效地做到这一点?
我的想法:调用一个 DB 存储过程,它返回 id 列表并基于此生成下载 zip 或删除。但是由于可以嵌套文件夹和文件,这在性能上的效率如何?
【问题讨论】:
-
您的用户能否使用浏览器 URL 直接导航到文件或文件夹?他们可以根据下载自己文件的URL格式猜测文件名来下载别人的文件吗?
-
用户可以猜测文件名,但他们无法猜测与该名称关联的文件的唯一 guid。就像你注意到我上面的例子一样,文件和文件夹名称将采用以下格式:name~guid
标签: c# asp.net sql-server filesystems document-management