使用前缀选项时,Google Cloud Storage API 不会返回任何文件



我有以下代码:

async function gcs_test() {
// Create a client
const storage = new gcs.Storage()
const [buckets] = await storage.getBuckets()
const bucket = buckets[0]
console.log(`Using bucket ${bucket.name}`)
const [files] = await bucket.getFiles({prefix: 'Users/', delimiter: '/', autoPaginate: false})
console.log('FILES:', JSON.stringify(files))
}

每当我使用delimiter选项时,我都没有得到任何回报。如果我不通过delimiter我会得到所有以"Users/"开头的文件,例如"Users/foo/project/1"、"Users/bar/project/2"等。

我猜设置delimiter时不返回任何内容的原因是/Users中没有任何文件,只有"目录"(所有文件都在更深的地方(。所以我的问题实际上是:如何在给定前缀(父目录(的情况下在存储桶中列出"目录"?

Google Cloud REST API 返回与prefix匹配的对象的数据。这意味着目录。

如果查看 REST API,将看到返回的数据(响应(包含prefixes。这是前缀匹配项的列表。处理此列表项。

谷歌的定义:

与 和 匹配但未列出的对象的前缀列表 包括请求的分隔符。

演示如何处理此问题的示例代码:

bucket.getFiles({prefix: 'Users/', delimiter: '/', autoPaginate: false}, function(err, files, nextQuery, apiResponse) {
// process files[] here
// process apiResponse.prefixes[] here (subdirectory names)
});

谷歌云存储对象响应对象

关于列出对象的谷歌文档

Cloud Storage 没有"目录"。 它具有带有分隔符的文件路径,这些分隔符模拟分层结构,可以轻松组织和推理对象。 您可以将每个文件路径视为映射到对象的大哈希中的唯一键。

如果没有包含某个前缀的对象,那么该前缀实际上根本不存在 - 不能有对象名称,它只是一个路径中没有子项的"目录"。

有关更多详细信息,请阅读对象名称的云存储定义。

最新更新