2016-07-15 5 views
1

Feuerbasis Datenbank, die eine Funktion hat, wo ich Daten wieder abrufen können, wenn etwas auf dem Weg geändertWie kann ich feststellen, ob eine bestimmte Feuerbasis Speicherpfad Daten geändert hat

firebase.database().ref('users/' + Auth.uid + '/profileImg').on('value', function(snapshot) { //do things when the data changed}); 

ich mich gefragt, ob jemand wissen, ob Feuerbasis Lagerung tut das gleiche? Zum Beispiel, wenn ich ein anderes Profilbild hochlade, wie kann ich dieses imageUrl abrufen?

Ich verstehe ich es in die Art und Weise unten abgerufen werden kann, aber da ich in einem anderen Controller erfassen Änderungen möge, die nicht in dem gleichen Controller wie der Upload-Platz ist, würde diese Methode nicht.

     uploadTask.on('state_changed', function (snapshot) { 
         // Observe state change events such as progress, pause, and resume 
         // See below for more detail 
        }, function (error) { 
         // Handle unsuccessful uploads 
        }, function() { 
         $scope.userProfile = uploadTask.snapshot.downloadURL; 
        }); 
       }, function (error) { 
        console.error(error); 
       }); 

Thank you !!

Antwort

1

Firebase Speicher hat keine eingebaute Fähigkeit, proaktiv alert Kunden, wenn eine Datei geändert wird.

Dies ist etwas, das man durch die Kombination von Firebase Storage mit der Firebase Realtime-Datenbank leicht aufbauen kann. Halten Sie die downloadURL Ihrer Datei in der Datenbank und fügen Sie einen lastModified Zeitstempel:

images 
    $imageid 
    downloadUrl: "https://downloadUrl" 
    lastModified: 123873278327 

Jedes Mal, wenn Sie laden/aktualisieren Sie ein Bild in Firebase Lagerung, aktualisieren Sie die downloadURL/Zeitstempel in der Datenbank:

uploadTask.on('state_changed', function (snapshot) { 
    // Observe state change events such as progress, pause, and resume 
    // See below for more detail 
}, function (error) { 
    // Handle unsuccessful uploads 
}, function() { 
    $scope.userProfile = uploadTask.snapshot.downloadURL; 
    databaseRef.child('images').child(imageId).set({ 
     downloadUrl: uploadTask.snapshot.downloadURL, 
     lastModified: firebase.database.ServerValue.TIMESTAMP 
    }) 
}); 

Jetzt Sie können wissen, wann ein Bild geändert wurde, um für das Bild in die Datenbank Lage hören:

databaseRef.child('images').child(imageId).on('value', function(snapshot) { 
    // take the downloadUrl from the snapshot and update the UI 
}); 
+0

Thank you! Frank, ich werde es versuchen, aber ich denke, es wird funktionieren. Wenn Sie sich nur fragen, ob Sie das wissen, ändert sich die DownloadURL mit der Zeit/dem Ort, selbst wenn sich der tatsächliche Inhalt nicht ändert? So jetzt bin ich jedes Mal eine neue downloadURL bekommen von Ich brauche, anstatt es in der Datenbank zu speichern, sollte ich speichern Sie es nur in der Datenbank? –

+0

Und ich glaube auch, dass Timestamp von firebase2 unterstützt wurde. Hier ist der Code für firebase3 firebase.database.ServerValue.TIMESTAMP –

+0

den Code behoben. Dank dafür. Ich vergesse immer wieder, dass ServerValue.TIMESTAMP verschoben wurde. –

Verwandte Themen