V. 4.2.1 - API - Bilderimport

Ich habe am letzten Fr das Update von Shopware 4.1.4 auf 4.2.1 durchgeführt, seitdem funktioniert die Übermittlung der Bilder über API nicht mehr. Konkret werden sämtliche Bilder (ich benutze im API-Request das “link”-Attribut) zwar von der Ursprungsressource abgerufen, leider scheitert es dann an der korrekten Erkennung der Datei-Extension (obwohl alle Bilder .jpg sind). Daher landen sämtliche Bilder im Verzeichnis media/unknown. Da der ganze Prozess vor dem Update fehlerfrei funktionierte, kann ich es nur diesem zuschreiben. Kann jemand helfen? Update 26.02.2014: So, nachdem ich mich nun ein wenig durch den Code gewühlt habe, konnte ich sehen, dass sich da einiges geändert hat in der neuen Version, leider scheint sich das Problem auf mehrere Stellen zu zerstreuen. Wie eingangs erwähnt, werden Bilder beim API-Import über das “link”-Attribut nicht als Bilder erkannt/verarbeitet, da die Dateiendung abgeschnitten wird ,und in das Verzeichnis media/unknown verschoben. Ein kleiner Eingriff in \Shopware\Models\Media\Media.php in der Funktion setFileInfo(), wo ich $extension explizit auf ‘jpg’ gesetzt habe, führte dazu, dass das Bild richtig dargestellt und gespeichert wurde, leider wurden die Thumbnails aber immer noch nicht richtig generiert. Daher habe ich die Sache nochmals von vorne aufgerollt und festgestellt, das bereits beim Speichern der entfernten Datei im tmp-Ordner die Dateiendung verworfen wird, eine Korrektur in \Shopware\Components\Api\Resource\Media.php, Funktion internalCreateMediaByFileLink(), wo ich ganz am Anfang $name = pathinfo($link, PATHINFO_FILENAME); durch $name = pathinfo($link, PATHINFO_BASENAME); ersetzt habe, führte immerhin dazu, dass das Bild richtig im tmp-Ordner landete, aber nachfolgend derselbe Fehler auftrat. Bisher hatte jedes Update super funktioniert, dieses leider nicht, bitte liebe Shopware-Leute, es wäre super, wenn ihr einen Hotfix bereit stellen könntet, aktuell können wir so gar keine Artikel mit Bildern übertragen.

Mit der Version 4.2 hat sich einiges geändert. Der direkte Upload ist seitdem nicht mehr vorhanden, Performance Gründe. Es müssen die Bilder und die Artikel einzeln erstellt werden und später verknüpft.

Ich gebe die Bilder bei der API-Anfrage nicht direkt mit, sondern über das link-Attribut, also als Url, d.h. die Bilder werden erst im Rahmen der Verarbeitung der mitgesendeten Informationen abgerufen, ist so die performanteste Lösung. Gibt es noch jemanden, der den Fehler beim Bildupload über API bestätigen kann? Oder tritt das nur bei mir auf?

Ich habe bereits vor 4.2 die Bilder erst erstellt und dann über die ID im Artikel verwiesen, mir ist nur aufgefallen, dass die Bildnamen von Shopware angepasst wurden. Meine Anbindung hatte Probleme mit den Bildnamen - liegt daran, dass ab 4.2 jetzt auch Großbuchstaben im Bildnamen vorhanden sein dürfen, vorher hat der alles klein gemacht. Falls es wen interessiert (die gleichen Zeilen spare ich mir mal) Ab 4.2 $name = preg\_replace('#[^A-z0-9\-\_]#', '-', $name); bis 4.2 $name = strtolower($name); $name = preg\_replace('#[^a-z0-9\-\_]#', '-', $name); Was anderes - ich kann mit 4.2 immer noch keine Bilder updaten. Bis 4.2 stand in der Media Resource explizit, dass Updaten von Bildern nicht so cool ist. Ab 4.2 ist die Resource aufgebaut, und im Prinzip läuft da alles gleich ab wie beim speichern. Mein Bild wird aber nicht abgeglichen (gleicher Bildname, gleicher Pfad - nur eben ein aktueller Stand eines neuen Bildes). Hat wer das ans laufen bekommen? :slight_smile: Schöne Grüße, Niklas

Schau nach dem Bildupdate mal im media/unknown-Ordner nach, ob das neue Bild dahin verschoben wurde. Wenn ja, selbes Problem wie bei mir.

Nein, der unknown- Ordner bleibt bei mir leer. Das Update über die Resource schmeißt auch keine Exception, das Update geht also durch. Die Thumbnails werden auch tatsächlich neu generiert, aber eben mit dem alten Bild unter dem media/image Ordner. Wenn ich selbst manuell (zum Test) das Bild im image-Ordner austausche werden nicht einmal die Thumbnails neu generiert, das gleiche, wenn ich die Ursprungsdatei im image-Ordner vor dem Update lösche, dann gibt es auch eine Exception beim Update das kein Bild gefunden wurde. Mhhhh.

Bitte entschuldigt meine wohl blöde Frage: Ich habe jetzt verstanden, dass die Bilder nicht mehr über post/articles importiert werden und dass man die Thumbs separat generieren muss. Ich finde allerdings in der Doku nicht die Stelle, wo steht, wie man die Bilder jetzt importieren kann. Kann mir jemand auf die Sprünge helfen bitte?

Dass der Import der Bilder über post/articles gar nicht mehr geht, kann ich nicht bestätigen (zumindest nicht wenn man das Bild als Url mitsendet statt base64-encoded), der Code zum Abruf und Verarbeiten des Bildes ist auch noch da und wird ausgeführt (leider mit Fehlern, wie oben beschrieben). BTW: Wann gibts mal wieder eine neue Version, die die ganzen Bilderprobleme mal behebt, es wäre an der Zeit, das letzte Release ist von Februar?

Könntest Du mir trotzdem einen Hinweis geben, wo der Bilder Import (nicht per Zuweisung vorhandener Medien) beschrieben ist? Das wäre nett.

Siehe http://wiki.shopware.de/Shopware-4-API- … nzuf.FCgen unter „Weitere Beispiele“: $testArticle = array( 'name' =\> 'NeuerTestartikel', 'active' =\> true, 'tax' =\> 19, // alternativ 'taxId' =\> 1, 'supplier' =\> 'NeuerTest', // alternativ 'supplierId' =\> 2, 'categories' =\> array( array('id' =\> 15), array('id' =\> 16), ), 'images' =\> array( array('link' =\> 'http://lorempixel.com/640/480/food/'), array('link' =\> 'http://lorempixel.com/640/480/food/'), ), 'mainDetail' =\> array( 'number' =\> 'swTEST' . uniqid(), 'inStock' =\> 16, 'prices' =\> array( array( 'customerGroupKey' =\> 'EK', 'price' =\> 99.34, ), ) ), ); $client-\>call('articles', ApiClient::METHODE\_POST, $testArticle); Genau mit der Methode, Bilder zu übergeben, hakt es aber eben leider…

1 „Gefällt mir“

Hallo zusammen, hänge auch gerade am Bilderimport fest. Allerdings werden die Bilder, die per URL übergeben werden, in den media/image kopiert. Es fehlen die Thumbnails, was ja auch laut Shopware aus Performance-Gründen nicht mit dem Request erledigt wird. Es gibt dazu einen neuen Aufruf um die Thumbnails zu gerenerieren. Der Aufruf generateArticleImages funktioniert bei mir leider nicht. :cry: Im Backend kann ich die Thumbs manuell erstellen lassen, doch das ist ja sicher nicht im Sinne des Erfinders. Hat jemand diesen request schon erfolgreich getestet? Grüße sunflower

Hallo, vielen Dank für den Hinweis. Heißt das, von den bei dir per url übertragenen Bildern werden nicht die Dateiendungen abgeschnitten?

Gleiches Problem hier. Bilder werden hochgeladen (mit Endung jpg), die Erstellung der thumbs bekomme ich aber auch nicht über die API hin. Das ist alles sehr mühsam seit v4.2. Leider ist auch die bislang vorbildliche Doku nicht mehr auf dem aktuellsten Stand oder ich verstehe sie halt nicht mehr.

[quote=“Michael Hilz”]Heißt das, von den bei dir per url übertragenen Bildern werden nicht die Dateiendungen abgeschnitten?[/quote] Nein, allerdings muss man penibel auf Groß/Kleinschreibung in der URL achten. Im Moment wird bei mir bei manchen Bildern ein String “1-” vor meine ursprüngliche Bildbezeichnung gepackt. Keine Ahnung warum. Das hat nichts mit doppelten Bildern zu tun, den diese werden durch eine angehängte Zufallszahl in der Bildbezeichnung gekennzeichnet. Grüße sunflower

Ok, da anscheinend nur bei mir die Dateiendungen abgeschnitten werden und die Bilder ohne Endung im media/unkwnown-Ordner landen, muss ich wohl ein fehlerhaftes Update meinerseits in Betracht ziehen, evtl. versuche ich eine Neuinstallation. Vielen Dank für eure Erfahrungen. Generell kann ich den Grund „Performance-Steigerung“ für die Änderungen an den Bilderfunktionen auch nicht nachvollziehen, das hatte immer sehr gut funktioniert über die url-Methode (kein Vergleich zu Magento, wos nur die Möglichkeit gibt/gab, die Bilder base64-encoded zu übertragen)

Hallo Michael, was bedeutet “die Dateiendungen werden abgeschnitten”? Liegt die Datei im Verzeichnis /media/image ohne Erweiterung? Grüße sunflower

Ein von mir mit dem Dateinamen z.B. “bild1.jpg” übertragenes Bild landet nach der Übertragung mit dem Dateinamen “bild1” im Ordner “media/unknown” (die Übertragung selbst läuft korrekt, wenn ich die Datei manuell umbenenne, ist es genau das Bild, das ich hochgeladen habe) Grund: Nach der Übertragung wird die Dateiendung abgeschnitten, die anschließende Zuordnung des Dateityps (funktioniert über die Dateiendung) schlägt fehl, somit landet es im besagten Ordner. Habe in älteren Forenbeiträgen gelesen, dass Leute beklagt haben, dass ihre hochgeladenen Bilder letztendlich Dateinamen wie z.B. “bild1.jpg.jpg” bekommen haben, ich denke, hier haben die Shopware-Leute nachgebessert. Bei mir hats allerdings zu einer Verschlechterung geführt, da es so gar nicht mehr funktioniert. Da ihr allerdings sagt, dass es bei euch funktioniert, muss ich mir das wohl nochmal genauer ansehen. Ich hatte im Code schon einen kleinen Hack drin, der das Abschneiden der Dateiendung verhindert hat, so wurde das Bild zumindest im richtigen Ordner abgelegt. Da die Thumbnails dann aber fehlten, führte ich dies auch auf den Fehler zurück.

Habe eben die Fehlermeldung SW-8152 gesehen. Im Kommentar steht was von der PHP-Version. Ich habe mit 5.4.8 und 5.4.17 getestet. Grüße sunflower

Hallo zusammen, mit der Version 4.2.2rc funktioniert bei mir das Anlegen eines Artikels mit einem Bild. Die Thumbnails werden generiert. :smiley: Dann hoffe ich mal das das bis zum Release auch so bleibt… sonnige Grüße sunflower

Das sind ja mal gute Nachrichten. Musstest du dabei die Thumbnailgenerierung extra anstoßen oder ging das einher mit der Übertragung?