如何在谷歌存储桶中列出所有上传到存储桶的文件?

Posted

技术标签:

【中文标题】如何在谷歌存储桶中列出所有上传到存储桶的文件?【英文标题】:How to list all files uploaded to storage bucket in Google Storage Bucket? 【发布时间】:2020-06-14 18:26:41 【问题描述】:

我在谷歌云存储桶中上传了许多文件。我想对该特定存储桶的所有文件的名称执行操作。 我怎样才能实现它?

【问题讨论】:

我建议阅读云存储列表 API。 cloud.google.com/storage/docs/listing-objects 【参考方案1】:

documentation 显示了使用提供的节点 SDK 列出存储桶中所有文件的示例。您将需要使用 Bucket 对象的 getFiles() 方法。

// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Imports the Google Cloud client library
const Storage = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

async function listFiles() 
  // Lists files in the bucket
  const [files] = await storage.bucket(bucketName).getFiles();

  console.log('Files:');
  files.forEach(file => 
    console.log(file.name);
  );


listFiles().catch(console.error);

【讨论】:

【参考方案2】:

以下解决方案适用于客户端。 对于每个问题的 Node 环境,请参考 Doug Stevenson 的回答

您需要使用listAll() 方法获取所有文件名。

这是官方文档中的一个例子

// Create a reference under which you want to list
var listRef = storageRef.child('files/uid');

// Find all the prefixes and items.
listRef.listAll().then(function(res) 
  res.prefixes.forEach(function(folderRef) 
    // All the prefixes under listRef.
    // You may call listAll() recursively on them.
  );
  res.items.forEach(function(itemRef) 
    // All the items under listRef.
  );
).catch(function(error) 
  // Uh-oh, an error occurred!
);

我建议使用list 方法而不是listAll,因为后者将所有结果存储在内存中,而前者使用分页。

Cloud Storage Documentation

【讨论】:

问题是关于nodejs。 Firebase SDK 在这里无济于事。

以上是关于如何在谷歌存储桶中列出所有上传到存储桶的文件?的主要内容,如果未能解决你的问题,请参考以下文章

覆盖不属于存储桶所有者的 S3 对象文件的权限

列出 AWS S3 存储桶的特定“文件夹”中的文件

如何在谷歌大查询中从谷歌云存储上传表格

如何阻止 Spark 结构化流每次都列出 S3 存储桶中的所有文件

将文件上传到 Firebase 云存储时出错:“rules_version = 1 不允许列出存储桶中的对象”

如何使用 gsutil 命令列出 gcs 存储桶中的所有文件(包含所有文件夹)以匹配文件内容中的特定字符串