【问题标题】:Access Firebase Storage from Firebase Functions从 Firebase 函数访问 Firebase 存储
【发布时间】:2019-12-20 00:31:21
【问题描述】:

我的最终目标是生成 pdf 并通过电子邮件通过 Firebase Cloud Function 发送,但我仍在测试。我正在使用 Nodemailer 发送电子邮件。我的下一步是在 Firebase 存储的同一个项目中包含我存储的图像。

如何访问存储中的文件以作为附件包含在内?我的函数触发器是onCreate(),用于 RTDB 中的一个节点。

functions.database
    .ref("/jobs/draft/{id}")
    .onCreate((snapshot: any, context: any) => {

【问题讨论】:

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


    【解决方案1】:

    要“访问存储中的文件”,您必须使用Admin SDK,如下所示:

     //.....
      const admin = require('firebase-admin');
     //.....
    
      functions.database
          .ref("/jobs/draft/{id}")
          .onCreate((snapshot: any, context: any) => {
    
            const fileBucket = 'gs://bucket.appspot.com';
            const filePath = 'path/to/file';
    
            const bucket = admin.storage().bucket(fileBucket);
            const file = bucket.file(filePath);
    
            //.....
    
          });
    

    另见https://googleapis.dev/nodejs/storage/latest/Storage.html

    【讨论】:

    • filePath 应该是一个字符串,其中包含所需文件的路径,但 fileBucket 应该是什么?
    • 我似乎无法使用 nodemailer 将文件附加到电子邮件中。 const file = bucket.file(filePath); 是一个关于文件的对象。
    • 您可以查看File 的文档:googleapis.dev/nodejs/storage/latest/File.html
    • 感谢您的帮助@Renaud Tarnec。我很接近。我在电子邮件中收到附件,但它是空的。路径是正确的,因为我还获取了同一个文件的元数据并且正在正确检索。我正在使用file.get()
    • 已解决:更改附件 > 文件为附件 > 内容附件:[{ filename: 'image', contentType: contentType, content: attachment }],
    猜你喜欢
    • 2018-04-08
    • 2019-02-05
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2018-10-02
    相关资源
    最近更新 更多