【问题标题】:C# Google Cloud Storage Get ListObjects in FoldersC# Google Cloud Storage 获取文件夹中的 ListObjects
【发布时间】:2020-01-23 16:15:50
【问题描述】:

我将所有应用程序信息存储在 Google Cloud Storage 中。我创建了一个存储桶,在这个存储桶内我有文件夹。使用该代码,我可以获得所有文件夹的列表。

public static IList<uFolder> ListFolders(string bucketName)
{
     if (storageService == null)
     {
          CreateAuthorizedClient();
     }

     Objects objects = storageService.Objects.List(bucketName).Execute();
     if (objects.Items != null)
     {
          return objects.Items.
               Where(x => x.ContentType == "application/x-www-form-urlencoded;charset=UTF-8").
               Select(x => new uFolder(x.Name)).ToList();
      }
      return null;
}

但实际上,这段代码将我所有的文件和文件夹都放在我的存储桶中。所以我需要提取它们。我的第一个问题,这种方法有捷径吗?

我的另一个也是最重要的问题是,我怎样才能获取特定文件夹中的所有文件?例如; 我的存储桶名称是 MyBucket,我想从“MyBucket/2/”中获取所有文件。我怎样才能做到这一点?这是检查文件的 medialink 或 selflink 的唯一方法吗?

感谢大家的回答。祝你有美好的一天,干得好......

【问题讨论】:

    标签: c# .net httpwebrequest google-cloud-storage


    【解决方案1】:

    我认为您想要的是将列表请求的Delimiter 属性设置为/。这将在您的层次结构的顶层返回一个分隔的结果。

    【讨论】:

    • 你能给我看C#的例子吗?我在互联网上找不到任何示例
    • jterrace 先生,我可以获取顶层目录中所有文件夹和文件的列表吗?
    • 设置分隔符应该做什么。另外,你能发布你的解决方案吗?
    【解决方案2】:

    如果想在你的谷歌云存储中获取顶级文件夹,每个人都可以使用;

    ObjectsResource.ListRequest request = storageService.Objects.List(CurrentBucket);
    request.Delimiter = "/";
    Google.Apis.Storage.v1.Data.Objects response = request.Execute();
    if (response.Prefixes != null)
    {
        return response.Prefixes.ToList();
    }
    

    如果想获取特定文件夹内的文件夹;

    ObjectsResource.ListRequest request = storageService.Objects.List(CurrentBucket);
    request.Delimiter = "/";
    request.Prefix = delimiter; //delimiter is any sub-folder name. E.g : "2010/"
    Google.Apis.Storage.v1.Data.Objects response = request.Execute();
    if (response.Prefixes != null)
    {
        return response.Prefixes.ToList();
    }
    

    注意:我正在返回到达文件夹的前缀。

    【讨论】:

      【解决方案3】:

      这是你的问题(你能给我看 C# 的任何例子吗?我在互联网上找不到任何例子 - Umut Çömlekçioğlu)。请检查 C# 中的代码以上传对象或获取对象列表 -

          using Google.Apis.Auth.OAuth2;
          using Google.Cloud.Storage.V1;
      
          string file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Test.csv");
          File.WriteAllText(file, "test");
      
          GoogleCredential credential = null;
          BucketConnector bucketConnector = new BucketConnector();
          credential = bucketConnector.ConnectStream();
          var storageClient = StorageClient.Create(credential);
          //Upload object in google bucket 
          string folderPath = ConfigurationParameters.FOLDER_NAME_IN_BUCKET;
          using (FileStream file = File.OpenRead(localPath))
          {
              objectName = folderPath + Path.GetFileName(localPath);
              storage.UploadObject(bucketName, objectName, null, file);           
          }   
       // get list of object from google bucket and specific folder   
      ListObjectsOptions listObjectsOptions = new ListObjectsOptions();
                      listObjectsOptions.Delimiter = "/";
                     foreach (var obj in storageClient.ListObjects(ConfigurationParameters.BUCKET_NAME ,ConfigurationParameters.FOLDER_NAME_IN_BUCKET , listObjectsOptions))
                      {
                          string obj_name = obj.Name;
                       }
      

      【讨论】:

        猜你喜欢
        • 2018-07-13
        • 2013-08-22
        • 2015-03-29
        • 2018-09-16
        • 1970-01-01
        • 1970-01-01
        • 2016-06-09
        • 2014-08-30
        • 2017-11-08
        相关资源
        最近更新 更多