有没有可能写一个firebase云函数,当一个新的fila在firebase存储中创建时触发onFinalize(但我们事先不知道确切的bucket)?
在我的firebase存储中有一个文件夹“loads”,里面有一个以load id命名的文件夹,如:
- /loads/-Lw1UySdunYyFMrrV6tl
- /loads/-LwisA5hkNl_uxw3k36f
- /loads/-LwkPUm-q7wNv-wZ49Un
https://ibb.co/NnQkTyC这是存储的屏幕截图
我想触发云函数时,新的文件已被创建在这些文件夹之一。我不知道在哪里创建的文件。我不知道这是否可能。所以我需要你的建议。
我的主要目标是在云函数中合并2个PDF文件。在我的应用程序(用vuejs编写的TMS)中,我在前端使用html 2canvas/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条答案
按热度按时间g6ll5ycj1#
修改问题后进行编辑
根据您的代码和Cloud Storage控制台的打印屏幕,您正在项目的默认存储桶中工作,其位置的URL为
gs://alex-logistics.appspot.com
。在云存储控制台的打印界面中可以看到,您存储桶中的文件以分层结构呈现,就像您本地硬盘上的文件系统一样。然而,这只是一种呈现文件的方式:如果存储桶中没有真正的文件夹/目录,云存储控制台只是使用文件路径的不同部分来“模拟”文件夹结构。
因此,基于上面的段落,我认为您的问题可以重新措辞为“* 在云函数中,如何提取上传到Firebase项目默认存储桶的文件路径的不同部分?*".
回答:
在文件添加到默认存储桶时触发的云函数中,可以获取文件路径如下:
由于我们使用了
onFinalize
事件处理程序,因此您可以通过使用object
对象的name
属性(类型为ObjectMetadata
)来获取此新文件的路径。然后,您可以使用一些
String
方法,例如,从该路径中提取您在问题中引用的${loadID}
。