【问题标题】:Google Cloud Storage - ListObjects, folder are not shown.Google Cloud Storage - ListObjects、文件夹未显示。
【发布时间】:2018-07-13 15:44:14
【问题描述】:

我正在试用 Google Cloud Storage,但它的 C# SDK 有问题。具体来说,我创建了一个带有文件夹 a/、b/、c/ 的存储桶(文件夹中有文件)。当我使用时:

gsutil ls gs://<mybucket>/root/

文件夹正确显示为:

gs://<mybucket>/root/a
gs://<mybucket>/root/b
gs://<mybucket>/root/c

但是,当我使用 C# SDK 列出文件夹时,

var client = StorageClient.Create();
var opt = new ListObjectsOptions() { Delimiter = "/" };
var ret = client.ListObjects("<mybucket>", "root/", opt);
var lst = new List<Google.Apis.Storage.v1.Data.Object>(); 
foreach (var item in ret )
{
    lst.Add(item);
}

结果列表为空(未返回文件夹)。请注意,如果我将上面的代码更改为:

var opt = new ListObjectsOptions();

文件夹中的所有文件都可以成功列出。怎么了?带分隔符选项的 ListObjects 可以列出存储桶中的文件夹吗?

【问题讨论】:

  • 你试过root而不是root/作为前缀吗?
  • 我尝试了两个“root”。同样的问题(gsutil 返回 3 个文件夹,C# SDK 没有返回)。
  • 这个问题你解决了吗?同样的问题

标签: c# google-cloud-storage


【解决方案1】:

在 API 参考中Delimiter 描述如下:

用于以“目录模式”列出。只有名称(前缀除外)不包含分隔符的对象才会被返回。

基本上你必须将 Delimiter 设置为空

var opt = new ListObjectsOptions() { Delimiter = "" };

否则它会忽略存储桶中的每个文件夹。只需将 Delimiter 设置为空,其余代码即可工作。

【讨论】:

  • 我需要列出目录。如果 Delimiter 设置为“”,它将列出前缀下的所有文件。这不是我想要的。这里的问题是 Google Cloud Storage 的 .Net API 的行为与 gsutil 不同。
猜你喜欢
  • 1970-01-01
  • 2018-10-17
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-08
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多