是否可以在firebase函数触发器中使用gsutil?每次用户在存储桶中添加或删除文件时,我都希望更新包含多个文件夹大小的变量,因此在存储触发器中使用gsutil du -s gs://[BUCKET_NAME]/[FOLDER_NAME]
。
还有一个其他解决方案可以获得比gsutil更多的文件夹大小...
答案 0 :(得分:2)
您可以使用@google-cloud/storage NPM module,特别是Bucket.getFiles()来遍历文件列表并添加其大小。 (我相信这是gsutil du
在幕后所做的事情。请注意,如果您返回的文件超过1,000个,则需要处理分页结果。
通过HTTP运行以下功能,您应该得到如下输出:
3 files: 9.55MB / 10008960
<强> index.js 强>
const functions = require('firebase-functions');
exports.bucketSizer = functions.https.onRequest((req, res) => {
const storage = require('@google-cloud/storage')();
const bytes = require('bytes');
const bucketName = 'MY_BUCKET_NAME';
const dir = 'MY_DIRECTORY_NAME/';
const options = {
prefix: dir,
};
storage
.bucket(bucketName)
.getFiles(options)
.then(results => {
const files = results[0];
let totalSize = 0;
console.log('Files:');
files.forEach(file => {
console.log(file.name);
let fileSize = parseInt(file.metadata.size);
console.log(fileSize);
totalSize += fileSize;
});
console.log("Total file size--> ", totalSize);
res.send(`${files.length} files: ${bytes(totalSize)} / ${totalSize}`);
return true;
})
.catch(err => {
console.error('ERROR:', err);
res.status(500).send(err);
});
});
&#13;
<强>的package.json 强>
$ npm install --save @google-cloud/storage
$ npm install --save bytes