我正在创建可用于上传文件的Firebase应用。如何获取用户在其(users/{userId}/{allPaths=**})
文件夹中使用的空间量?
答案 0 :(得分:7)
好问题。简而言之,没有简单的方法可以做到这一点(即使对我们来说也是如此!),因为这实际上要求我们对一整套文件进行递归并将它们全部加起来。它是一个相当大的mapreduce,每次上传文件都不会有效。
然而,我们会在metadata.size
属性中返回单个文件的大小,因此您可以在服务器上执行自己的list
调用(查看gcloud`)给你一个文件列表和"文件夹"。获取文件的大小并将其添加,然后递归并对所有子文件夹执行相同操作。总结一下,然后写一些类似Firebase实时数据库的东西,在那里你可以轻松地从客户端获取文件夹大小。
答案 1 :(得分:0)
这是我写的一个小脚本,用于计算用于每个“文件夹”的文件和字节数,并输出到控制台。
function main(bucketName = 'YOUR_BUCKET_NAME') {
/**
* TODO(developer): Uncomment the following line before running the sample.
*/
// 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:');
let bucketList = {};
files.forEach(file => {
let folder = file.name.split('/')[0];
if (!bucketList[folder]) {
bucketList[folder] = {};
bucketList[folder]['bytes'] = 0;
bucketList[folder]['count'] = 0;
}
bucketList[folder]['bytes'] += Number(file.metadata.size);
bucketList[folder]['count'] +=1;
});
console.log(bucketList);
}
listFiles().catch(console.error);
// [END storage_list_files]
}
main(...process.argv.slice(2));