如何使用NodeJS列出GCS存储桶中的目录

srf*_*rnk 4 node.js google-cloud-storage google-cloud-platform

I如果您使用的是NodeJS GCS客户端库,并且想在存储桶中列出目录,该如何做?

srf*_*rnk 5

首先package.json通过运行以下命令将NodeJS GCS客户端库的依赖项添加到文件中:

npm -i @google-cloud/storage --save
Run Code Online (Sandbox Code Playgroud)

然后将其添加到您的代码中以列出所有文件

const storage = require('@google-cloud/storage');
...
const projectId = '<<<<<your-project-id-here>>>>>';
const gcs = storage({
    projectId: projectId
});

let bucketName = '<<<<<your-bucket-name-here>>>>>';
let bucket = gcs.bucket(bucketName);
bucket.getFiles({}, (err, files,apires) => {console.log(err,files,apires)});
Run Code Online (Sandbox Code Playgroud)

这会将所有具有完整路径的文件返回到中files

要仅列出目录,您必须解决客户端库中的一个怪癖,即要求您不使用自动分页,然后向CB返回一个额外的参数。为此,将代码更改为此:

let cb=(err, files,next,apires) => {
    console.log(err,files,apires);
    if(!!next)
    {
        bucket.getFiles(next,cb);
    }
}
bucket.getFiles({delimiter:'/', autoPaginate:false}, cb);
Run Code Online (Sandbox Code Playgroud)

这将返回根路径下带有/in 的目录列表apires.prefixes

要仅列出目录下的foo/目录,请使用以下代码:

let cb=(err, files,next,apires) => {
    console.log(err,files,apires);
    if(!!next)
    {
        bucket.getFiles(next,cb);
    }
}
bucket.getFiles({prefix:'foo/', delimiter:'/', autoPaginate:false}, cb);
Run Code Online (Sandbox Code Playgroud)