【问题标题】:Download and Delete files and folders based on criteria根据条件下载和删除文件和文件夹
【发布时间】: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


【解决方案1】:

按照下面的代码进行处理:

在 Js 文件中:

var file_name = response.value[0]["name"];
var downloadurl = response.value[0]"@microsoft.graph.downloadUrl"];

//--------------------------------------------- --------------------------//

function HandleIT(downloadurl,file_name) {
    PageMethods.ProcessIT(downloadurl,file_name, onSucess, onError);
    function onSucess(result) {
        alert(result);       
    }
    function onError(result) {
        alert('Something wrong.');
    }
}

在我们背后的代码中的 Web 方法:

[WebMethod]
        public static string ProcessIT(string downloadURL, string file_name)
        {            
            // Create a new WebClient instance.
            WebClient myWebClient = new WebClient();
            string  path = @"c:\";
            string path_n_name = path + file_name; 
            // Download the Web resource and save it into the current filesystem folder.
            myWebClient.DownloadFile(downloadURL, path_n_name);
            return "SUCCESS";
        }

这就是我删除文件的方式

if(fileName != null || fileName != string.empty)
    {
       if((System.IO.File.Exists(fileName))
           System.IO.File.Delete(fileName);

     }

希望它对你有用...!

【讨论】:

  • 别忘了包括:- 使用 System.Net;
猜你喜欢
  • 2011-01-02
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多