Получить братьев и сестер созданного файла в облачной функции Firebase, вызванной onFinalize - PullRequest
0 голосов
/ 31 января 2020

У меня есть облачная функция, которая срабатывает при создании нового файла в хранилище Firebase. Внутри этой функции logi c мне нужно собрать все остальные файлы, расположенные по тому же пути в массиве. Но я не знаю как.

exports.testCloudFunc = functions.storage.object().onFinalize(async object => {
  const filePath = object.name;

  const { Logging } = require('@google-cloud/logging');

  console.log(`Logged: ${filePath}`);
  let obj = JSON.stringify(object);
  console.log(`Logged: ${obj}`);
});

После этого я попытаюсь объединить все PDF-файлы в один новый файл и сохранить его обратно в хранилище Firebase по тому же пути. Любая помощь высоко ценится! Заранее благодарю за мудрость)

1 Ответ

0 голосов
/ 04 февраля 2020

В соответствии с документацией Дуг Стивенсон связан (2-й пример кода для Node.js), вы можете перечислить объекты из указанной папки в вашей корзине, используя префиксы и разделители .

Образец из упомянутой документации:

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const prefix = 'Prefix by which to filter, e.g. public/';
// const delimiter = 'Delimiter to use, e.g. /';

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

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

async function listFilesByPrefix() {
  /**
   * This can be used to list all blobs in a "folder", e.g. "public/".
   *
   * The delimiter argument can be used to restrict the results to only the
   * "files" in the given "folder". Without the delimiter, the entire tree under
   * the prefix is returned. For example, given these blobs:
   *
   *   /a/1.txt
   *   /a/b/2.txt
   *
   * If you just specify prefix = '/a', you'll get back:
   *
   *   /a/1.txt
   *   /a/b/2.txt
   *
   * However, if you specify prefix='/a' and delimiter='/', you'll get back:
   *
   *   /a/1.txt
   */
  const options = {
    prefix: prefix,
  };

  if (delimiter) {
    options.delimiter = delimiter;
  }

  // Lists files in the bucket, filtered by a prefix
  const [files] = await storage.bucket(bucketName).getFiles(options);

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

listFilesByPrefix().catch(console.error);

Делает это означает, что все файлы будут сначала возвращены, а затем будут отфильтрованы по префиксу?

Как я вижу в примере кода выше, массив [files] будет хранить объекты, которые уже соответствуют требованиям фильтра:

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