Hallo Zusammen,
wie wird bei Shopware 6 der Pfad für die Bilder im Ordner media und thumbnail berechnet?
Also z.B. /media/c6/01/f7/1605766406/Beispiel.jpg
Es wäre schon hilfreich, die Logik für diesen Teil des Pfades zu kennen: /c6/01/f7/
Danke!
Hallo Zusammen,
wie wird bei Shopware 6 der Pfad für die Bilder im Ordner media und thumbnail berechnet?
Also z.B. /media/c6/01/f7/1605766406/Beispiel.jpg
Es wäre schon hilfreich, die Logik für diesen Teil des Pfades zu kennen: /c6/01/f7/
Danke!
Ich hab nicht nachgeschaut, aber schätzungsweise wird hier einfach eine Zufallsauswahl getroffen.
Diese sorgt dann dafür dass kein Ordner übervoll wird und die Dateien gleichmäßig verteilt sind.
Denke nicht dass es hier eine spezielle Logik dahinter gibt, wozu auch?
Ich denke das Interface ‚vendor/shopware/core/Content/Media/Pathname/PathnameStrategy/PathnameStrategyInterface.php‘ hat die Funktion generatePathHash.
Diese ist verschieden implementiert, ich denke aber es wird wahrscheinlich generateMd5Path in der ‚vendor/shopware/core/Content/Media/Pathname/PathnameStrategy/AbstractPathNameStrategy.php‘ verwendet. Dein Pfad ist also ein zufällig erzeugter md5 hash:
protected function generateMd5Path(string $fromValue): string { $md5hash = md5($fromValue) ; $md5hashSlices = \array_slice(str_split($md5hash , 2 ) , 0** , **** 3**);$md5hashSlices = array_map( function ($slice) { return array_key_exists($slice**,$this->blacklist) ? $this->blacklist[$slice] : $slice; } ,$md5hashSlices );return implode(‚/‘,$md5hashSlices);** }
Wobei nicht ganz zufällig, der Pfad ist ein md5 Hash aus der ID der Datei.
Aber nachdem die ID der Datei normalerweise zufällig erzeugt wird kommt das aufs gleiche raus.
Hier mal in nem Shop von uns geprüft:
Media-ID: 2b9d0802bf574a0a964fd1c0ffc87094
Media-URL: Der Domainname meinshop.de steht zum Verkauf.
Und hier den md5 Hash gebildet:
Your Hash: 5f9af00b9ecfc95864a0cebd875be24c
Your String: 2b9d0802bf574a0a964fd1c0ffc87094
Ich denke mal in SW6 ist es wie in SW5
Es wäre schon hilfreich, die Logik für diesen Teil des Pfades zu kennen: /c6/01/f7/
Die 3x2 „Blöcke“ sind die ersten 6 Stellen eines Ergebnisses berechnet aus dem md5 Hash von „media/image/Beispiel.jpg“.
Anschliessend wird aus diesen ersten 6 Stellen-Ergebnis und dem Original-File der Pfad neu zusammengestellt media/image/c6/01/f7/Beispiel.jpg
Das kann man per PHP oder direkt in der Datenbank mit SQL errechnen.
Thumbnails werden jedoch noch mit zusätzlichem Klimbim im Pfad ausgestattet und daraus dann die ersten 6 Stellen des md5 Hashs genommen.
Hallo @ThomasChr,
meinen besten Dank für die Antwort!
Ich habe den Ordnerpfad mit der gehashten media-id des Bildes auch bei uns im System nachvollziehen können.
Hintergrund ist übrigens, dass ich nun die ganzen Ordnerleichen, die beim Löschen von Bildern entstehen (das hat Shopware leider nicht sauber gelöst), auch vom Server löschen kann.
Hallo @brettvormkopp,
die bei Shopware 5 benutzte Logik für den Ordnerpfad ist bei Shopware 6 nicht mehr gültig. Siehe korrekte Antwort von @ThomasChr.
Hier nochmal aufgeschlüsselt wie man es mit php (vereinfacht) machen würde:
//Tabelle: media, Spalte "updated_at"
$updatedAt = strtotime("2024-08-15 10:15:04.987");
//ergebnis: 1723716904
//Tabelle media, Spalte "file_name"
$fileName = "modelbau";
$beidesAlsMd5 = md5($updatedAt."/".$fileName);
//Ergebnis: d08cbfcd20f5094393f29f06ef02a49c
//Pfad aus 3x2 Stellen des vorherigen Ergebnises
$hashPfad1 = substr($beidesAlsMd5,0,2); // Ergebnis: d0
$hashPfad2 = substr($beidesAlsMd5,2,2); // Ergebnis: 8c
$hashPfad3 = substr($beidesAlsMd5,4,2); // Ergebnis: bf
//korrigieren, wenn im Pfad ad steckt, dann soll es mit g0 getausch werden
$hashPfad1 = str_replace("ad", "g0", $hashPfad1);
$hashPfad2 = str_replace("ad", "g0", $hashPfad2);
$hashPfad3 = str_replace("ad", "g0", $hashPfad3);
//Tabelle media, Spalte "file_extension"
$fileExtension = "jpg";
$ganzerPfad = "public/media/{$hashPfad1}/{$hashPfad2}/{$hashPfad3}/{$updatedAt}/{$fileName}.{$fileExtension}";
//Ergebnis: public/media/d0/8c/bf/1723716904/modelbau.jpg
//bzw in der Datenbank
$ganzerPfadDatenbank = "media/{$hashPfad1}/{$hashPfad2}/{$hashPfad3}/{$updatedAt}/{$fileName}.{$fileExtension}";
//Ergebnis: media/d0/8c/bf/1723716904/modelbau.jpg
Sollten die ersten 6 Zeichen der MD5 sein: Shopware 5 - Bildpfad aus Datenbank generieren - Hosting Pilot