C#Google云存储在文件夹中获取ListObjects

时间:2016-10-19 14:24:21

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

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

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,我想从&#34; MyBucket / 2 /&#34;中获取所有文件。我怎样才能做到这一点?这是检查文件的medialink或selflink的唯一方法吗?

感谢所有回答。祝你有个美好的一天,好的作品......

3 个答案:

答案 0 :(得分:1)

如果想要获取Google云端存储中的热门文件夹,每个人都可以使用;

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();
}

注意:我返回了覆盖率文件夹的前缀。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是您的问题(您可以使用C#演示任何示例吗?我在Internet上找不到任何示例– 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;
                 }