Firebasefunction可以在使用NodeJS从数据库中删除对象时从存储中删除文件

我是NodeJS的新手,我正在尝试为Firebase的云端函数编写下一个方法。

我正在努力实现的是:

  1. 当用户从Firebase DB中移除Photo对象时,该function应该被触发;
  2. 该代码应该从对应于Photo obj的存储中移除文件对象。

这些是我的Firebase数据库结构:

照片/ {userUID} / {} photoUID

{ "dateCreated": "2017-07-27T16:40:31.000000Z", "isProfilePhoto": true, "isSafe": true, "uid": "{photoUID}", "userUID": "{userUID}" } 

Firebase存储格式:

照片/ {userUID} / {} photoUID .PNG

和我正在使用的NodeJS代码:

  const functions = require('firebase-functions') const googleCloudStorage = require('@google-cloud/storage')({keyFilename: 'firebase_admin_sdk.json' }) const admin = require('firebase-admin') const vision = require('@google-cloud/vision')(); admin.initializeApp(functions.config().firebase) exports.sanitizePhoto = functions.database.ref('photos/{userUID}/{photoUID}') .onDelete(event => { let photoUID = event.data.key let userUID = event.data.ref.parent.key console.log(`userUID: ${userUID}, photoUID: ${photoUID}`); if (typeof photoUID === 'undefined' || typeof userUID === 'undefined') { console.error('Error while sanitize photo, user uid or photo uid are missing'); return } console.log(`Deleting photo: ${photoUID}`) googleCloudStorage.bucket(`photos/${userUID}/${photoUID}.png`).delete().then(() => { console.log(`Successfully deleted photo with UID: ${photoUID}, userUID : ${userUID}`) }).catch(err => { console.log(`Failed to remove photo, error: ${err}`) }); }); 

当我运行它时,我得到下一个错误:“ApiError:未find”

在这里输入图像描述

我认为这部分代码是导致问题的部分:

 googleCloudStorage.bucket(`photos/${userUID}/${photoUID}.png`).delete() 

提前感谢支持和耐心。

       

网上收集的解决方案 "Firebasefunction可以在使用NodeJS从数据库中删除对象时从存储中删除文件"

尝试编码这个

 const gcs = require('@google-cloud/storage')() const fileBucketPush = 'Storage bucket.appspot.com'; // The Storage bucket that contains the file. const filePathPush = 'folder/'+nameImage; // File path in the bucket. vision.detectSafeSearch(gcs.bucket(fileBucketPush).file(filePathPush)) .then((results) => { ../// }) .catch((err) => { console.error('ERROR:', err); }); 

您是否启用Cloud Vision API?

发现这个问题,这里是代码适合我:

 exports.sanitizePhoto = functions.database.ref('photos/{userUID}/{photoUID}') .onDelete(event => { let photoUID = event.data.key let userUID = event.data.ref.parent.key console.log(`userUID: ${userUID}, photoUID: ${photoUID}`); if (typeof photoUID === 'undefined' || typeof userUID === 'undefined') { console.error('Error while sanitize photo, user uid or photo uid are missing'); return } console.log(`Deleting photo: ${photoUID}`) const filePath = `photos/${userUID}/${photoUID}.png` const bucket = googleCloudStorage.bucket('myBucket-91823.appspot.com') const file = bucket.file(filePath) file.delete().then(() => { console.log(`Successfully deleted photo with UID: ${photoUID}, userUID : ${userUID}`) }).catch(err => { console.log(`Failed to remove photo, error: ${err}`) }); });