2017-02-11 3 views
0

Die beste Methode zum Löschen von beschädigten Bildern aus einer Datenbank. Ich habe mehr als 30.000 Bildeinträge in meiner mongodb-Datenbank, aber viele sind im Laufe der Zeit kaputt gegangen. Ich möchte nur Bilder zurückgeben, die auf der Serverseite nicht beschädigt sind. Was wäre die beste Methode, um alle beschädigten Bilder zu finden und einen Parameter hinzuzufügen oder die beschädigten Bilder aus der Datenbank zu löschen?Fehlerhafte Bilder in der mongodb-Datenbank

Momentan gebe ich alle Bilder an das Frontend zurück und mache das "Onerror" -Attribut. Sollte ich irgendwie alle Bilder exportieren und iterieren und einen Export der Bild-IDs bekommen? Gibt es bessere Möglichkeiten oder was kann ich dafür verwenden? Ich suche nur Rat.

+0

Ich hatte ein Problem mit Bildbeschädigung in Mongo, und das Dumping der Daten und die Wiederherstellung behebt das Problem – Mikkel

+0

Sie könnten einen Cronjob schreiben, der einmal pro Monat (oder länger) versucht, jedes Bild mit 'HTTP.get() zu laden 'und bei Fehler entfernt die URL aus der Sammlung. –

+0

Was speichern Sie in Ihrer Datenbank für die Bilder (einen Dateipfad zu einem Bild, eine URL, ein Binärbild, eine API-Referenz, ...)? Wie kann man sagen, dass ein Bild "kaputt" ist (d. H. Ist das korrupt/fehlt/...)? – Stennie

Antwort

0

Sie könnten Blaze-Vorlagen-Ereignishandler verwenden, um Bildladefehler zu erfassen, dann das Bild als fehlgeschlagen kennzeichnen oder es einfach löschen. Selbstreinigende und immer läuft ...

Template.ImageLoader.events({ 
    //TODO: possibly add an extra class name on the img tag, to make sure you only catch errors from your collection. 
    'error img': function(event, template) { 
    const url = event.currentTarget.src; 
    //TODO: find the image in your collection, using the url 
    //TODO: perform cleanup (flag or delete) 
    alert(`error loading image ${url}`); 
    } 
}); 

Ich würde vorschlagen, einen Fehlerzähler zu Ihrer Sammlung hinzufügen und $inc es jedes Mal, wenn ein Ladefehler auftritt. Sobald die Anzahl der Ladefehler eine bestimmte Anzahl erreicht, löschen Sie sie.