2
votes

Firebase Storage-Comment supprimer un fichier du stockage avec node.js?

Je souhaite supprimer un dossier dans le stockage Firebase avec le nœud js car il s'agit d'une fonction Firebase.

Par exemple :

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

quelque chose comme ça, mais la documentation de Firebase ne dit rien.

Une autre question: lorsque l'initialisation du nœud de documentation de stockage js nécessite mon admin json, mais la base de données en temps réel ne veut pas de cette question pourquoi?


4 commentaires

Il n'existe aucun moyen de supprimer un dossier de Firebase Storage. Voir stackoverflow.com/questions/38214052/… . Pour supprimer tous les fichiers du dossier, vous aurez besoin de savoir quels fichiers il y a car il n'y a aucun moyen d'obtenir une liste de fichiers dans un dossier via le SDK Firebase, voir: stackoverflow.com/questions/37335102/...


@FrankvanPuffelen Mais je peux supprimer des dossiers dans le navigateur. Est-ce quelque chose lié à Firebase SDK?


Correct. Les SDK Firebase n'autorisent pas la suppression de dossiers.


@FrankvanPuffelen Je viens de réaliser quelque chose: il y a 6-8 éléments dans mon stockage.10 avec des dossiers. Et j'ai toujours supprimé les dossiers dans le navigateur. Mais quand je regarde mon utilisation de stockage, il indique 230 éléments au total.Donc, dans le navigateur, la suppression de dossiers ne fonctionne pas non plus, mais rend simplement le dossier invisible?


4 Réponses :


4
votes

Jetez un œil à la référence de l'API client Node.js pour Google Cloud Storage et en particulier à la méthode delete() pour un File .


1 commentaires

Mais il me demande d'activer la facturation. Pourquoi? J'utilise firebase-functions pour supprimer -write les données dans la base de données en temps réel de firebase cela fonctionne très bien.



0
votes

Cela peut être en retard mais au moins sur le Web (donc essentiellement ce dont vous avez besoin), il existe une nouvelle API pour supprimer tout le dossier.

J'ai testé la suppression d'un dossier avec 2 images à l'intérieur et cela fonctionne. J'ai ensuite essayé un dossier-A avec le contenu: dossier-B + image-A. Le dossier-B a également une image-B à l'intérieur; il a toujours supprimé le dossier-A avec tout son contenu.

Solution:

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

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

Je n'ai pas pu trouver cela sur la documentation officielle (peut-être est-ce vraiment une nouvelle API) mais un article vraiment cool où j'ai trouvé la solution: supprimer automatiquement vos fichiers de stockage Firebase de Firestore avec Cloud Functions pour Firebase


3 commentaires

sérieusement, c'est une mauvaise idée, si par erreur vous lui passez une chaîne vide comme préfixe, savez-vous ce qui se passe? tous les fichiers de ce compartiment seront supprimés


YAH! CECI JUSTE) (* $ @ * (# $ # M'EST PASSÉ! Je ne lui ai pas donné de chaîne vide cependant. J'avais littéralement le chemin du dossier que je voulais supprimer .... Cher dieu .....


le lien que vous avez partagé est pour dactylographié que tout le monde a pour js?



0
votes

Vous pouvez le faire comme ceci en utilisant Nodejs ainsi que côté client (tant que les utilisateurs ont l'autorisation d'écriture):

// 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!
});

Consultez ces informations sur le site Web de Firebase: comment supprimer des fichiers Firebase-storage


0 commentaires

0
votes
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"

0 commentaires