uzaysan
uzaysan

Reputation: 605

Firebase Storage-How to delete file from storage with node.js?

I want to delete a folder in firebase storage with node js because this is a firebase function.

For example :

storageRef.child(child1).child(child2).delete();

something like this, but firebase documentation doesn't tell anything.

One more question: When initialize storage documentation node js requires my admin json, but realtime database doesn't want this wonder why?

Upvotes: 6

Views: 11719

Answers (4)

Dustin Spengler
Dustin Spengler

Reputation: 7691

You can do it like this using Node.js:

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

async function deleteImageFromFirebase(imageName) {
    await firebase.storage().bucket().file("folderName/"+imageName).delete();
}

And like this client side:

// Create a reference to the file to delete
var desertRef = storageRef.child('images/desert.jpg');

// Delete the file
desertRef.delete().then(function() {
  // File deleted successfully
}).catch(function(error) {
  // Uh-oh, an error occurred!
});

View this info on the Firebase website: how to delete files Firebase-storage

Upvotes: 7

Chukwuemeka Maduekwe
Chukwuemeka Maduekwe

Reputation: 8526

import { storage } from "./firebaseClient";
import { bucket } from "./firebaseServer";

//Let's assume this is the URL of the image we want to delete
const downloadUrl =  "https://storage.googleapis.com/storage/v1/b/<projectID>.appspot.com/o/<location>?"

//firebase delete function
const deleteImages = async ({ downloadUrl }) => {
    const httpsRef = storage.refFromURL(downloadUrl).fullPath;
    return await bucket
        .file(httpsRef)
        .delete()
        .then(() => "success")
        .catch(() => "error")
}

//call the deleteImages inside async function
const deleteStatus = await deleteImages({ downloadUrl: oldImage });
console.log(deleteStatus)  //=> "success"

Upvotes: 0

Marius Mircea
Marius Mircea

Reputation: 89

This might be late but at least on Web (so basically what you need), there is new API to delete the whole folder.

I tested deleting a folder with 2 pictures inside and it works. I then tried a folder-A with contents: folder-B + picture-A. Folder-B also has a picture-B inside; it still deleted folder-A with all of its contents.

Solution:

const bucket = admin.storage().bucket();

return bucket.deleteFiles({
  prefix: `posts/${postId}`
);

I couldn't find this on the official documentation (perhaps is really new API) but really cool article where I found the solution: Automatically delete your Firebase Storage Files from Firestore with Cloud Functions for Firebase

Upvotes: 1

Renaud Tarnec
Renaud Tarnec

Reputation: 83093

Have a look at the Node.js client API Reference for Google Cloud Storage and in particular at the delete() method for a File.

Upvotes: 5

Related Questions