Как создать облачную функцию Google, которая возвращает список объектов из облачного хранилища - PullRequest
0 голосов
/ 08 января 2020

Итак, я пытаюсь вернуть массив объектов. Я хочу перечислить все объекты в определенном сегменте в облачном хранилище Google с помощью облачных функций. Ниже то, что я имею до сих пор. это возвращается и необработанное обещание.

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);
    });
  });
});

Это то, что он возвращает при входе в консоль. Я хочу отобразить тот же результат, когда я вызываю облачную функцию для перечисления объектов в корзине.

https://firebasestorage.googleapis.com/v0/b/kais-e4ba9.appspot.com/o/Screen%20Shot%202020-01-07%20at%207.22.27%20PM.png?alt=media&token=b777d63d-3053-4453-86e7-1e2f19f97a51

Ответы [ 2 ]

1 голос
/ 08 января 2020

Используя облачные функции GCP и Node.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);
  });
1 голос
/ 08 января 2020

Вы можете использовать API списка облачного хранилища для списка файлов в корзине. Это на 100% не связано с Firestore.

Вот код, взятый из связанной документации:

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

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

Это просто добавить это в вашу функцию. То, как вы начали с «нового обещания», на самом деле не лучший способ для go. Мы go будем использовать синтаксис 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...