Проверить данные файла хранилища в облачной функции Firebase

После загрузки файла в хранилище Firebase я хочу вызвать облачную функцию firebase из своего веб-приложения, которая будет проверять данные файла, которые я ему отправил, а затем сохранять их в базе данных в реальном времени.

Я вызываю функцию, используя следующий код:

var fileRef = 'Files/' + user.uid + '/' + fileId + '/' + file.name;
var storage = firebase.storage().ref(fileRef);
//Upload the file
//..................
// After uploading the file
storage.getMetadata().then(function(metadata) {
    var date = metadata.timeCreated.toString();
    var storage = firebase.storage().ref('Files/' + user.uid + '/' + fileId + '/' + file.name);

    storage.getDownloadURL().then(function(url){
        var saveFileData = functions.httpsCallable('saveFileData');
        saveFileData({
            fileId: fileId,
            fileRef: fileRef,
            fileData: {
                Uploader: user.uid,
                Title: title,
                FileName: file.name,
                Size: fileSize,
                DownloadURL: url,
                UploadDate: date,
            }
        }).then(function(){
            // Do something
        });
    });
});

Я хочу проверить значения FileName, Size, DownloadURL и UploadDate в облачной функции на основе следующих условий:

  • fileRef содержит существующий файл из хранилища firebase.
  • FileName совпадает с именем файла, представленного fileRef.
  • Размер соответствует размеру файла, представленного fileRef.
  • UploadDate совпадает с датой создания файла, представленного fileRef.
  • DownloadURL содержит ссылку для загрузки файла, представленного fileRef.

Каким будет подходящий способ сделать это с помощью облачной функции Firebase?

Вместо того, чтобы вызывать облачные функции из вашего приложения, запускайте их прямо из записи в хранилище. См. На этой странице примеры доступных данных: firebase.google.com/docs/storage/extend-with-functions

Frank van Puffelen 18.05.2018 16:01

Но как мне получить метаданные из облачной функции?

Sadman Rizwan 18.05.2018 17:04

Ах я вижу. Ваш saveFileData записывает в облачную функцию, которая затем записывает в базу данных в реальном времени. Это означает, что вам нужно будет прочитать его из базы данных в реальном времени в вашей облачной функции. Для этого вы будете использовать Firebase Admin SDK, как показано здесь: stackoverflow.com/questions/43650472/… и здесь: stackoverflow.com/questions/43913139/…

Frank van Puffelen 18.05.2018 19:22
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Валидация полей ввода для базовой формы React
Валидация полей ввода для базовой формы React
В одном из моих проектов MERN Stack есть форма с именем, фамилией, контактным номером, адресом, электронной почтой, датой рождения, номером NIC, весом...
Пользовательские правила валидации в Laravel
Пользовательские правила валидации в Laravel
Если вы хотите создать свое собственное правило валидации, Laravel предоставляет возможность сделать это. Создайте правило с помощью следующей...
0
3
749
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать триггеры хранилища, развертывание в облачных функциях Firebase,

В объекте вы получите все метаданные для загруженного файла, например, здесь

exports.generateMetaForUpload = functions.storage
  .object()
  .onFinalize(object => {
    console.info(object);
       //do whatever you need to verify
  });

Другие вопросы по теме