【问题标题】:Cloud Functions for Firebase: write to database on fileuploadCloud Functions for Firebase:在文件上传时写入数据库
【发布时间】:2017-10-26 06:12:10
【问题描述】:

我有一个云函数(generateThumbnail 示例函数的修改版)。我想创建缩略图,但我也想获取图像的宽度和高度,并更新数据库中的大小值。

解决这个问题:

  1. 我需要获取当前数据库的快照
  2. 导航到数据库的/projects
  3. 使用文件名 (project.src == fileName) 查找正确的密钥
  4. 获取图像大小(完成)
  5. project.size 更新为新值

我做了一些研究,但我只找到了functions.database.DeltaSnapshot接口,即在您收听functions.database().ref().onwrite(snapshot => {})时给出的接口

projects.json:

[{
    "name": "lolipop",
    "src": "lolipop.jpg",
    "size": ""
},{
    "name": "cookie",
    "src": "cookie.jpg",
    "size": ""
}]

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-storage google-cloud-functions


    【解决方案1】:

    可以使用firebase-admin 包完成数据库交互。查看this sample,了解不是由数据库写入触发的函数如何访问数据库。

    通过 Firebase 中某个键的值访问子节点有点笨拙,最后会详细介绍。

    对于每个问题:

    1 & 2:创建对数据库中项目键的引用

    3:通过src 键找到您要查找的项目

    5:Update 项目

    // create reference
    const projectsRef = admin.database().ref('projects');
    
    // create query
    const srcProjectQuery = projectsRef.orderByChild('src').equalTo(fileName);
    
    // read objects that fit the query
    return srcPojectQuery.once('value').then(snapshot => {
        const updates = {};
    
        snapshot.forEach(childSnapshot => {
            updates[`${childSnapshot.key}/size`] = fileSize;
        });
    
        return projectsRef.update(updates);
    });
    

    由于您似乎将src 值视为唯一值,因此可以通过使用src 作为每个项目对象的键来避免很多麻烦。这会将事情简化为:

    const projectsRef = admin.database().ref(`projects/${src}`);
    projectsRef.update({'size': fileSize});
    

    【讨论】:

    • srcProjectRef.update('size': fileSize): 而不是 ,。但更重要的是,我刚刚收到srcProjectRef.update is not a function 错误。我应该发布我的功能的某些部分吗?
    • 再想一想之后,它比我最初发布的更令人费解。有关新的详细信息,请参阅编辑后的帖子。
    • 将“val”替换为“value”。但它无论如何都会抛出错误this.submissionsRef is undefined
    • 我最终选择了 src 作为关键方法,但我还是想解决这个问题,以供将来参考和其他人参考。
    • 抱歉,我自己尝试复制粘贴错误。将提交内容更改为 projectsRef
    猜你喜欢
    • 2017-11-12
    • 2018-06-22
    • 2018-01-17
    • 1970-01-01
    • 2018-01-03
    • 2019-10-03
    • 2019-04-08
    • 2017-08-25
    • 1970-01-01
    相关资源
    最近更新 更多