1

Ich verwende Firebase-Speicher und Realtime Database zum Speichern des Bildes und der Download-URL. Der Dateiname wird in zufälliger Weise generiert, mit der Download-URL generiert und in der Echtzeit-Datenbank gespeichert wird.Löschen Firebase Storage Bild URL mit Download-URL

Szenario: Wenn der Benutzer ein neues Bild hochlädt (zB Profilbild) Ich möchte das alte Bild mit Hilfe von downloadImageurl löschen (Die Download-URL wird generiert, wenn das Bild zuerst hochgeladen wird und in der Echtzeitdatenbank gespeichert wird) Wie kann das alte Bild gelöscht werden? Ich habe unten Code versucht, aber damit es funktioniert, muss ich Dateinamen bekommen.

gcs 
      .bucket("e**********.appspot.com") // find it in Firebase>Storage>"gs://...." copy without gs 
      //or go to console.cloud.google.com/ buckets and copy name 
      .file("images/" +event.params.uid+"/"+filename) //file location in my storage 
      .delete() 
      .then(() => { 
       console.log(`gs://${bucketName}/${filename} deleted.`); 
      }) 
      .catch(err => { 
       console.error('ERROR-DELETE:', err+ " filename: "+filename); 
      }); 
+0

Führen Sie diesen Code in Cloud-Funktionen aus? Und Sie verwenden die Google Cloud Storage-Knoten-API? Es kann hilfreich sein, wenn Sie mehr Kontext dazu angeben, was hier vor sich geht. –

+0

@DougStevenson Ja, ich verwende Cloud-Funktion.Bitte finden Sie die aktualisierte Frage – Rohit

+0

Ich verwende const gcs = require ('@ google-cloud/storage')(); und folgen Sie dem Github-Tutorial, um ein Thumbnail-Bild zu erzeugen. Eine Hilfe dazu ist hilfreich, um weiter zu gehen. – Rohit

Antwort

0

Je nachdem, was Sie wollen:

  1. das Originalbild halten und sie löschen manuell in Zukunft in der Lage.
  2. Löschen Sie sofort, nachdem das Thumbnail generiert wurde.

Ich nehme an, Sie verwenden this example

1- Sie haben die filePath in Ihrem db zu speichern. Dann, wenn Sie es von der Haus löschen möchten:

import * as firebase from 'firebase'; 
... 
const store = firebase.storage().ref(); 
// Depending on which db you use and how you store, you get the filePath and delete it: 
store.child(image.filePath).delete(); 

2- weiter das Versprechen von der Feuerbasis Funktion wie folgt aus:

// ...LAST PART OF THE EXAMPLE... 
.then(() => {  
// Add the URLs to the Database 
return admin.database().ref('images').push({path: fileUrl, thumbnail: thumbFileUrl}); 
}).then(() => { 
// ...PART YOU CAN ADD TO DELETE THE IMAGE UPLOADED 
const bucket = gcs.bucket(bucket); 
bucket.file(filePath).delete(); 
}) 

„Eimer“ ist die const vorher erstellt:

const bucket = gcs.bucket(event.data.bucket); 

sowie "filePath":

const filePath = event.data.name; 
1

Ich bin mir nicht sicher, ob das der richtige Weg ist oder nicht. Ich habe versucht, mit Download-URL zu löschen, aber es funktioniert nicht richtig.

-Code

import * as firebase from 'firebase'; 
... 
let name = imagePath.substr(imagePath.indexOf('%2F') + 3, (imagePath.indexOf('?')) - (imagePath.indexOf('%2F') + 3)); 
name = name.replace('%20',' '); 
let storagePath = firebase.storage().ref(); 
storagePath.child(`images/${name}`).delete(); 

Dieser Code den Namen der Datei aus dem URL holen und diese Datei gelöscht werden. Derzeit funktioniert diese Lösung für mich!

Verwandte Themen