Delete file in cloud storage from cloud functions

孤者浪人 提交于 2020-02-03 02:08:25

问题


I'm trying to make a Google Cloud Function which deletes images linked to person object in Firebase realtime database.. But every time I'm getting "Error during request" error (without any specific error.code, it's just undefined).. Here is a function code:

const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
const gcs = require('@google-cloud/storage')({ 
  projectId: "PROJ_ID",
  keyFilename: "SERV_ACC.json LOCATED IN FUNCTIONS FOLDER"});

admin.initializeApp(functions.config().firebase);

exports.removePersonImage = 
functions.database.ref("users/{userId}/persons/{personId}")
 .onDelete((snapshot, context) => {
   const person = snapshot.val();    

   if (!person.photo || !person.photo.key) {
    console.log("Person doesn't have photo");
    return true;
   }

   var path = "user/" + context.params.userId + "/" + person.photo.key + ".jpg";

   console.log("Bucket path: " + path);

   return gcs.bucket(path)
    .delete()
    .then(() => {
      console.log("Image " + person.photo.key + " successfully deleted");
      return true;
    })
    .catch(err => {
      console.error("Failed to remove image " + person.photo.key);
      console.error("Error: " + err.message);
      return false;
    });
});

回答1:


I think you are getting the reference to a Bucket with the path of a File.

You should first create a reference to your Bucket and then use the file() method on the Bucket to create the File object.

First declare the bucket from the root bucket name you see in the Storage console but without gs://, as follows:

const bucket = gcs.bucket("***projectname***.appspot.com");  

Then declare your file with the sub-buckets (i.e. the "directories")

const file = bucket.file("user/" + context.params.userId + "/" + person.photo.key + ".jpg");

Then call delete:

return file.delete()
    .then(() => {
    ....

See https://cloud.google.com/nodejs/docs/reference/storage/1.7.x/Bucket#file

and https://cloud.google.com/nodejs/docs/reference/storage/1.7.x/Storage#bucket



来源:https://stackoverflow.com/questions/50679125/delete-file-in-cloud-storage-from-cloud-functions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!