typescript - 如何创建从 Cloud Storage 返回对象列表的 Google Cloud 函数
问题描述
所以我试图返回一个对象数组。我想使用云功能列出谷歌云存储中特定存储桶中的所有对象。以下是我到目前为止所拥有的。它返回和未处理的承诺。
export const getAlbums = functions.https.onCall(() => {
return new Promise(async (resolve, reject) => {
//const bucket = admin.storage().bucket('kais-e4ba9.appspot.com')
const { Storage } = require("@google-cloud/storage");
const storage = new Storage();
const bucket = storage.bucket("bucketName");
resolve(bucket)
}).catch(err => {
console.log(err.message);
});
});
我写了一个类似的函数,它从 firebase firestore 返回一组文档。
export const getGenres = functions.https.onCall(() => {
//if (!context.auth) return {status: 'error', code: 401, message: 'Not signed in'}
return new Promise((resolve, reject) => {
const array = [{}];
const ref = admin.firestore().collection("genres");
// filter out inaActive genres
const query = ref.where("isActive", "==", true);
query.onSnapshot(querySnapshot => {
// Add genres into an array
const genres = querySnapshot.docs.map(documentSnapshot => {
return {
...documentSnapshot.data(),
key: documentSnapshot.id // required for FlatList
};
});
array.push(genres);
resolve(array);
});
});
});
这是您将其记录到控制台时返回的内容。当我调用云函数列出存储桶中的对象时,我想显示相同的结果。
解决方案
您将需要使用Cloud Storage 列表 API 来列出存储桶中的文件。它与 Firestore 100% 无关。
这是从链接文档中提取的代码:
const [files] = await storage.bucket(bucketName).getFiles();
console.log('Files:');
files.forEach(file => {
console.log(file.name);
});
将它添加到您的函数中很简单。你从“新承诺”开始的方式并不是最好的方式。我们将使用 async/await 语法以使示例更易于复制:
export const getAlbums = functions.https.onCall(async () => {
const { Storage } = require("@google-cloud/storage");
const storage = new Storage();
const [files] = await storage.bucket(bucketName).getFiles();
console.log('Files:', files);
return files.map(file => file.name)
});
如果您只想要项目的默认存储桶,则可以bucketName
完全省略该参数。
推荐阅读
- java - 在自己的 maven-plugin "breaks" 安装插件目标中使用 lamda
- .net - 使用 Visual C# 生成 OCX activex 控件
- javascript - 如何避免在codeigniter的双击时间内插入两次
- json - JQ 过滤和映射基本:删除空值并将文本转换为小写
- javascript - 在 jquery 中获取结果“未定义”
- scala - DataFrame 和 RDD 计数方法为每个查询返回不同的大小。为什么?
- ruby - ruby 是否存在 MIME 标头解码器(RFC 2047)?
- angular - 如何隐藏 PrimeNG 数据表中动态列的列?
- php - 在输入字段中使用 php 放置默认值被 angularjs 清除
- hive - “<=>”hive 运算符的否定不能正常工作?