Как создать refFromURL с правами администратора для облачных функций? - PullRequest
0 голосов
/ 07 октября 2018

Я хочу получить ссылку на изображение, используя его URL-адрес http, когда запущена облачная функция обновления firestore, чтобы я мог взять URL-адрес из change, предоставленного функцией onUpdate(), и использовать его для получения ссылки на изображение нахранилище файловой базы и удалите его.

1 Ответ

0 голосов
/ 07 октября 2018

Чтобы удалить файл, хранящийся в облачном хранилище для Firebase, из облачной функции, вам нужно будет создать объект File на основе:

  1. Экземпляр Bucket этот файлприкреплен к;

  2. Имя файла,

, а затем вызовите метод delete()

, как подробно описано вдокументация библиотеки Node.js https://cloud.google.com/nodejs/docs/reference/storage/2.0.x/File.

Вот пример кода из документации:

const storage = new Storage();
const bucketName = 'Name of a bucket, e.g. my-bucket';
const filename = 'File to delete, e.g. file.txt';

// Deletes the file from the bucket
storage
  .bucket(bucketName)
  .file(filename)
  .delete()
  .then(() => {
    console.log(`gs://${bucketName}/${filename} deleted.`);
  })
  .catch(err => {
    console.error('ERROR:', err);
  });

Из вашего вопроса я понимаю, что клиенты вашего приложения не имеют ведраи имена файлов как таковые и имеют только URL-адрес для загрузки (вероятно, сгенерированный с помощью getDownloadURL , если это веб-приложение, или аналогичный метод для других SDK).

Таким образом, задача заключается в полученииимена блоков и файлов из URL-адреса для загрузки.

Если вы посмотрите на формат URL-адреса для загрузки, вы обнаружите, что он составлен следующим образом:

https://firebasestorage.googleapis.com/v0/b/<your-project-id>.appspot.com/o/<your-bucket-name>%2F<your-file-name>?alt=media&token=<a-token-string>

Так что вам просто нужноиспользуйте набор методов Javascript, таких как indexOf(), substring() и / или slice() для извлечения имен сегментов и файлов из URL-адреса для загрузки.

Исходя из вышеизложенного, ваш код облачной функции может выглядеть следующим образом:

const storage = new Storage();

.....

exports.deleteStorageFile = functions.firestore
    .document('deletionRequests/{requestId}')
    .onUpdate((change, context) => {
      const newValue = change.after.data();
      const downloadUrl = newValue.downloadUrl;

      // extract the bucket and file names, for example through two dedicated Javascript functions
      const fileBucket = getFileBucket(downloadUrl);
      const fileName = getFileName(downloadUrl);

      return storage
        .bucket(fileBucket)
        .file(fileName)
        .delete()

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