Alle Artikelbilder sauber löschen?

Aktuell arbeite ich an einer Schnittstelle um Produkte von einem alten fremdem Shop in Shopware zu übertragen. Während der Testphase lösche ich auch immer wieder alle Artikel im SW Shop. Hierzu habe ich mir eine Shopware “Putzfrau” erschaffen, die alles aus dem Shop wieder entfernt. Import und Löschen erfolgt überwiegend über die REST API. Nun das geht auch alles, leider bereiten mir aber die Artikelbilder im Media-Verzeichnis einige Kopfschmerzen.

1.) Über die REST-API können auch Artikel gelöscht werden. Leider werden aber die dazugehörigen Artikelbilder nicht gelöscht. Weder aus der Datenbank noch aus dem Verzeichnis. Wieso wurde das bisher nicht eigebaut? Kann ja sein, dass Artikel auch mal die selben Bilder benutzen können, aber wie oft kommt das in der Realität vor?

2.) Da Punkt 1. gar nicht funktioniert, könnte ich die Datenbank mit “DELETE FROM s_media WHERE albumID = -1” bereinigen. Aber wie zum Geier lösche ich sauber die Verzeichnisse? Leider sind die Media-Order wie z.B. “/media/image/02/f7/c2” sehr sehr sehr ungünstig erstellt worden. Von den Einträgen aus der Datenbank gibt es keinen nachvollziehbaren Bezug auf den Bildpfad. Warum ist das so?

Aktuell benutze ich eine Holzhammermethode und lösche mittels exec() dem kompletten Order “/media/image” und lege danach den Order “thumbnail” wieder an. Zum Testen reicht es allemal, aber eine saubere Lösung wäre hier dennoch mal angebracht. Ich würde es für gut empfinden, wenn man einen Artikel über REST API löscht, dass dann auch alle dazugehörigen Bilder aus der Datenbank und aus dem Verzeichnissen verschwinden.

Beste Grüße

 

 

Wieso wurde das bisher nicht eigebaut? Kann ja sein, dass Artikel auch mal die selben Bilder benutzen können, aber wie oft kommt das in der Realität vor?

Du kannst die Bilder ja auch in Shopseiten, Einkaufswelten oder sonstig eingebunden haben. Artikel und Bilder haben eine n:n Beziehung. Nutze doch einfach den Media-Endpunkt um die Bilder sauber zu löschen. Und danach erst den Artikel.

 https://developers.shopware.com/developers-guide/rest-api/api-resource-media/

Viele Grüße

1 „Gefällt mir“

@simkli‍  zu 2) er meint ja eher woher aus “/media/image/02/f7/c2” das “02/f4/c2” kommt. Da such ich mir auch einen Wolf.

@brettvormkopp‍ in dem zweiten Teil dieser Antwort ist es erklärt: https://forum.shopware.com/discussion/comment/216073/#Comment_216073

Viele Grüße

1 „Gefällt mir“

Der Pfad wird wie folgt erstellt. Shopware geht erstmal davon aus, dass ein Bild in /media/image/ liegt und ein Thumbnail in /media/image/thumbnail. Aus diesem Pfad wird dann ein md5-hash gebildet und die ersten 6 Zeichen werden für den Pfad benutzt. 

Beispiel:

legacy : /media/image/test.jpg
MD5 - hash : fe0ed9efda40f873ecbaed0999e756c9
new : /media/image/fe/0e/d9/test.jpg

legacy : /media/image/thumbnail/test_200x200.jpg
MD5-hash:  722b667c9f8b31fd2326148003dc2289
new : /media/image/72/2b/66/test_200x200.jpg

(ich hoffe das ist aus dem Kopf korrekt - weiß nicht ob das / an den Anfang gehört)

Details: MediaService

Es gibt ausnahmen wie bspw. „ad“ in den Verzeichnissen: shopware/Md5Strategy.php at 5.4 · shopware/shopware · GitHub

Der Pfad wird hier gebildet: shopware/Md5Strategy.php at 5.4 · shopware/shopware · GitHub

2 „Gefällt mir“

(ich hoffe das ist aus dem Kopf korrekt - weiß nicht ob das / an den Anfang gehört)

Eben getestet, das / muss dabei weg, 

1 „Gefällt mir“

Habe mal etwas weiter getestet. Im Test-Shop sind die Artikelbilder mit 200x200;600x600;1280x1280 eingestellt. Bei einer Kontrolle im Media-Verzeichnis fand ist aber auch Bilder mit:

  • …_140x140.jpg
  • …_140x140@2x.jpg
  • und weitere mit …@2x.jpg

Also ein einfaches komplettes saueres Löschen ist sehr umfangreich. Allerdings frage ich mich wo die Bilder mit 140x140 herkommen, weil diese Formate bei den Artiklelbilder gar nicht eingestellt sind. Heißt im Umkehrschluss, dass im laufe einer längeren Zeit im Shop Bilder erzeugt werden, die vermutlich gar nicht gebraucht werden.

Backend-Thumbnails

ah ok, Danke!

Jetzt muss ich das Thema doch noch mal hochholen.

Bei einem Bild verstehe ich jetzt die Logik nicht mehr:

legacy: media/image/thumbnail/5446_1280x720.jpg
MD5 : 69adb9fbc1a5b75a7ce0d236cdc94692
Müsste demnach hier liegen: /media/image/69/ad/b9/…

Aber der Shop legt das Bild hier ab :
/media/image/69/g0/b9/5446_1280x720.jpg

Wie kann denn das passieren? Woher kommt dieser Hash?

@R4M schrieb:

Jetzt muss ich das Thema doch noch mal hochholen.

Bei einem Bild verstehe ich jetzt die Logik nicht mehr:

legacy: media/image/thumbnail/5446_1280x720.jpg
MD5 : 69adb9fbc1a5b75a7ce0d236cdc94692
Müsste demnach hier liegen: /media/image/69/ad/b9/…

Aber der Shop legt das Bild hier ab :
/media/image/69/g0/b9/5446_1280x720.jpg

Wie kann denn das passieren? Woher kommt dieser Hash?

Schau dir nochmal meinen Post an :slight_smile:

Es gibt eine Ausnahme, da /ad/ von Adblockern blockiert wird: https://github.com/shopware/shopware/blob/5.4/engine/Shopware/Bundle/MediaBundle/Strategy/Md5Strategy.php#L36 

Bohhh :slight_smile:

Ich würde das gerne nochmal aufgreifen:
 

bei mir sind in Shopware nun einige Artikelbilder hinterlegt, aber auch Bilder in den Einkaufswelten und anderen “Verzeichnissen” im Mediamanager.

Allerdings hat mein media/images Ordner knapp 30GB, was nur irgendwelche Leichen vom Testen sein können. sw:cleanup hat schon gut was gelöscht, aber es ist noch immer viel zu viel an Daten vorhanden. Gerne würde ich einfach den gesamten media/images Ordner löschen und den Import nochmal neu starten, aber das geht ja nicht, weil ja sonst alle meine Einkaufswelten-Bilder, Bilder von Eigenschaften…etc. auch gelöscht werden, oder?