验证 Firebase 云功能中的存储文件数据

Posted

技术标签:

【中文标题】验证 Firebase 云功能中的存储文件数据【英文标题】:Validate storage file data in Firebase cloud function 【发布时间】:2018-10-28 21:18:58 【问题描述】:

在 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 云功能执行此操作的合适方法是什么?

【问题讨论】:

不要从您的应用程序调用 Cloud Functions,而是直接从存储写入触发它。有关可用数据的示例,请参阅此页面:firebase.google.com/docs/storage/extend-with-functions 但是如何从云函数中获取元数据? 啊,我明白了。您的 saveFileData 写入云函数,然后写入实时数据库。这意味着您需要从 Cloud Function 中的实时数据库中读取它。您将为此使用 Firebase Admin SDK,如下所示:***.com/questions/43650472/… 和此处:***.com/questions/43913139/… 【参考方案1】:

您可以使用存储触发器,在 Firebase Cloud Functions 中部署,

在对象中,您将获得上传文件的所有元数据,如here

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

【讨论】:

以上是关于验证 Firebase 云功能中的存储文件数据的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Firestore +云功能服务器端验证应用内购买收据(Swift + NodeJS)

将文件上传到 Firebase 云存储时出错:“rules_version = 1 不允许列出存储桶中的对象”

使用 Firebase 云功能将文件上传到云存储

基于 Firestore 数据的 Firebase 云存储规则可以解决

文件上传的 Firebase 云功能

Firebase 云功能中的 Firebase 存储错误