Firebase云功能onFinalize触发未预定义存储桶?

时间:2020-01-30 11:54:24

标签: javascript firebase google-cloud-functions firebase-storage

是否可以编写一个firebase云函数来触发何时在firebase存储中创建新的fila-onFinalize(但我们事先不知道确切的存储桶)?

在我的Firebase存储中,有一个文件夹“ loads”,而在其中,我有一个名为load id的文件夹,例如:

  • / loads / -Lw1UySdunYyFMrrV6tl
  • / loads / -LwisA5hkNl_uxw3k36f
  • / loads / -LwkPUm-q7wNv-wZ49Un

https://ibb.co/NnQkTyC这是存储的屏幕截图

在这些文件夹之一中创建新文件时,我想触发云功能。我不知道andvance将在哪里创建文件。我不知道这是否有可能。这就是为什么我需要一个建议。

我的主要目标是将2个pdf文件合并到一个云功能中。在前端的应用程序(用vuejs编写的TMS)中,我使用html2canvas / jsPDF创建confirmationOrder.pdf,然后将其保存到storage / loads / $ {loadID}。之后,用户可以在同一存储桶上手动上传POD.pdf。当发生这种情况时,我希望我的云功能将这两个pdf合并到一个新文件中(在同一存储桶中)。但是我又一次不知道这个桶。

这是我在前端上传PDF的方式:

 async uploadConfPDF({ commit }, payload) {
      const PDF = payload.PDF;
      const loadID = payload.loadID;
      const fileName = payload.fileName;

      const fileData = await firebase
        .storage()
        .ref(`loads/${loadID}/${fileName}.pdf`)
        .put(PDF);

      const confOrderURL = await fileData.ref.getDownloadURL();

      return confOrderURL;
    }, 

我们非常感谢您的帮助。抱歉,如果我的解释似乎不够清楚。英语不是我的母语。

1 个答案:

答案 0 :(得分:2)

在重新处理问题后进行编辑

根据您的代码和Cloud Storage控制台的打印屏幕,您正在项目的默认存储区中工作,该位置的URL为gs://alex-logistics.appspot.com

正如我们在您的Cloud Storage控制台的打印屏幕上看到的那样,存储桶中的文件以分层结构的形式显示,就像本地硬盘上的文件系统一样。但是,这只是呈现文件的一种方式:存储桶中没有真正的文件夹/目录,Cloud Storage控制台仅使用文件路径的不同部分来“模拟”文件夹结构。


因此,基于以上几段,我认为您的问题可以重新表述为“ 在云功能中,如何提取上传到默认文件路径的文件的不同部分”我的Firebase项目的存储桶?”。

答案:

在将文件添加到默认存储桶时触发的Cloud Function中,您可以按以下方式获取文件路径:

exports.yourCloudFunction = functions.storage.object().onFinalize(async (object) => {

    const filePath = object.name; // File path in the bucket.

    //...

});

由于我们使用onFinalize事件处理程序,因此您将使用object对象的name属性(类型为ObjectMetadata)来获取此新文件的路径。 。

然后,您可以使用某些String方法,例如从此路径中提取问题中所指的${loadID}