当前位置: 首页 > 知识库问答 >
问题:

如何创建从云存储返回对象列表的谷歌云功能

仇阳州
2023-03-14

所以我试图返回一个对象数组。我想列出所有的对象在谷歌云存储使用云函数内的特定桶。下面是我到目前为止。它返回和未处理的promise。

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 fi恢复的文档数组。

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函数列出bucket中的对象时显示相同的结果。

https://firebasestorage.googleapis.com/v0/b/kais-e4ba9.appspot.com/o/Screen拍摄时间:2020-01-07,晚上7:22.27。巴布亚新几内亚?alt=媒体

共有2个答案

云何平
2023-03-14

使用GCP的云函数和节点。JS您可以使用getFiles()方法从云存储桶中检索文件到列表中,然后遍历它们,如图所示:

  // Imports the Google Cloud client library
  const {Storage} = require('@google-cloud/storage');

  // Creates a client
  const storage = new Storage();

  /**
   * TODO(developer): Uncomment the following line before running the sample.
   */
  // const bucketName = 'Name of a bucket, e.g. my-bucket';

  // Lists files in the bucket
  const [files] = await storage.bucket(bucketName).getFiles();

  console.log('Files:');
  files.forEach(file => {
    console.log(file.name);
  });
司马高昂
2023-03-14

您会希望使用云存储列表应用编程接口来列出存储桶中的文件。它与火力恢复100%无关。

以下是从链接的留档中提取的代码:

const [files] = await storage.bucket(bucketName).getFiles();

console.log('Files:');
files.forEach(file => {
  console.log(file.name);
});

将其添加到函数中很简单。你从“新promise”开始的方式并不是最好的方式。我们将使用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)
});

如果您只想要项目的默认bucket,那么可以完全不使用bucketName参数。

 类似资料:
  • 如何在bucket下的所有文件在默认情况下仍然是公共可读的情况下禁用它? 我们以前使用

  • 我有一个具有统一访问控制的Google云存储桶,我在权限中添加了“诱惑者”。它说该对象是公共的,但当我尝试打开链接时,仍会收到此消息:“匿名调用方没有storage.objects.get access to the Google Cloud storage object”错误代码为“401”。我希望任何用户都能够访问该链接。我该怎么做?提前谢谢! 向你问好本

  • 我建立Android应用程序链接到谷歌云存储。我想允许访问GCS到我的Android应用程序只。 谷歌提供三种安全连接地面军事系统的解决方案: Oauth 2.0(谷歌账户也是如此) 资料来源:https://developers.google.com/storage/docs/authentication?hl=FR 是否有其他通过地面军事系统安全连接的解决方案?我希望通过这种方式在地面军事系统

  • 我们一直在使用服务,在(AWS)中,我们意外删除了一个目录,因此我们认为它应该在中,但是经过查看,尽管处于打开状态,但它并不存在。

  • 尝试从web执行云函数终结点时,我收到以下错误: 我遵循了这个教程:https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/functions/helloworld/main.py 按此处所述调用函数时:https://cloud.google.com/functions/docs/writing/http,我收