我一直在寻找一种方法来仅检索存储桶内的目录,而不检索其中的内容。
根据 Google Cloud Storage Docs可以按前缀过滤:
const Storage = require('@google-cloud/storage');
const storage = new Storage();
const options = {
prefix: prefix,
delimiter: '/'
};
storage
.bucket(bucketName)
.getFiles(options)
.then(results => {
const files = results[0];
console.log('Files:');
files.forEach(file => {
console.log(file.name);
});
})
.catch(err => {
console.error('ERROR:', err);
});
我已经尝试使用前缀:""
、或前缀:"*"
或前缀:"\"
等进行多种组合,但我无法使其仅返回文件夹。
有人能做到吗?
最佳答案
事实上,getFiles
方法并没有按照您使用它的方式读取文件夹。我已经调整了this post中的代码打印我的水桶:
const storage = require('@google-cloud/storage');
const projectId = 'PROJECT_ID';
const gcs = storage({
projectId: projectId
});
let bucketName = 'BUCKET_NAME';
let bucket = gcs.bucket(bucketName);
// bucket.getFiles({}, (err, files,apires) => {console.log(err,files,apires)});
let cb=(err, files,next,apires) => {
/*console.log('Err:');
console.log('Files:');
console.log(files);*/
console.log('Apires:');
console.log(typeof apires);
console.log(apires);
console.log(apires.prefixes);
if(!!next)
{
bucket.getFiles(next,cb);
}
}
bucket.getFiles({delimiter:'/', autoPaginate:false}, cb);
/*
// List folders inside folders
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);
*/
而且,即使这在这种情况下没有用,我建议您使用 regular expression确定名称的特定格式。
关于node.js - 使用 Node.js 列出 Google Cloud Storage 存储桶中的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50659628/