验证 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 不允许列出存储桶中的对象”