Ich lade ein JPEG-Bild mittels post über die RestAPI hoch (/api/media). Als paramter wird lediglich ‘name’, ‘album’, ‘description’ und ‘file’ übergeben. ‘file’ ist ein Dateiname relativ zur Wurzel im Dateisystem. ‘album’ ist auf -1 gesetzt. ‘name’ ist der Dateiname wie er auch in ‘file’, nur halt ohne den Pfad.
Der Upload klappt wunderbar und das Bild findet man danach auch in den meisten Fällen unter genau dem Namen in der Medienverwaltung wieder, wie beim Upload angegeben. Das klappt bei mehreren tausend Bildern, aber bei einigen wählt Shopware einen anderen Namen. So wird aus 10029302_F.jpg 10029302_FjqYGI9dVlg3rK.jpg, wohingegen 10029302_B.jpg unverändert übernommen wird. Aus 10032300_B.jpg wird aber z.B. 10032300_B33WN71XrOPULG.jpg
Ich frage mich warum Shopware hier einen anderen Namen wählt, obwohl der Ursprungsname eindeutig ist. Welches Kriterium wird hier herangezogen?
Grundsätzlich könnte es mir egal sein, wie Shopware die Medien intern benennt, nur fehlt mir dann eine Möglichkeit festzustellen, ob ein Bild bereits hochgeladen wurde. Zur Zeit nutze ich den Namen und die Dateigröße um festzustellen, ob ein Bild bereits in der Medienverwaltung existiert. Schöner wäre die MD5-summe der Bilddatei, aber wie bekomme ich die mit dem Bild abgespeichert und wieder abgerufen?
So wird aus 10029302_F.jpg 10029302_FjqYGI9dVlg3rK.jpg
Dieses Verhalten kommt eigentlich nur, wenn der Name zum Bild schon vorhanden ist bzw. das eigentliche Bild vielleicht nicht ersetzt sondern noch mal neu hochgeladen wurde.
Das hätte ich auch vermutet, aber dann müsste es unter dem Namen in der Tabelle s_media auch zu finden sein. Ein
select * from s_media where name like '10029302_F%';
liefert aber nur das Bild mit dem langen Namen. Ich habe den Quellcode schon nach der Stelle durchsucht, wo der interne Name generiert wird, konnte aber Nichts finden. Irgendwo muss im Quellcode entschieden werden, ob der gelieferte Name passt oder ein neuer Name erzeugt wird.
Wie R4M sagte, passiert dies, wenn die Datei schon existiert. Dabei ist wichtig, dass die Datei im Dateisystem liegt und nicht die Meta-Informationen in der Datenbank. Ich nehme mal an, dass du ein paar verwaiste Medien Dateien ohne Datenbank eintrag hast. Leider gibts in Shopware keinen Cronjob/CLI Command um das aufzuräumen.