Bilder Upload über API/url

Hallo zusammen,

habe zu spät gesehen, dass es auch ein deutsche Forum gibt. Daher hier nochmal die Frage

Ich möchte über ein vba script in MS Access die Kategorien in einem sw6 Shop aktualisieren. Beim upload von Bildern gibt es ein Problem.

Das anlegen eines leeren media-Objekts geht problemlos:

POST /api/media

payload:{„mediaFolderId“:„00d649bbe5a9477fa975ad33273246ed“,id“:„ec90cae2cc84c37b6b7a0cb9fe5c4548“}

Im zweiten Schritt das Bild hochladen geht dann schief:

POST /api/_action/media/ec90cae2cc84c37b6b7a0cb9fe5c4548/upload?extension=png&fileName=testfile

payload: {„url“:„http://…/testfile.png“}

(gleiche url über Backend macht keine Probleme)

Dadurch wird eine Datei „testfile.png“ erzeugt. Die Datei enthält aber nicht das Bild sondern den payload String {„url“:„http://…/testfile.png“}

Bin etwas ratlos.

Anbei der code:

Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
Authurl = url & "/api/_action/media/" & newMediaID & "/upload?extension=" & FileExtFromUrl(MediaUrl) & "&fileName=" & FileNameFromUrl(MediaUrl) & "&_response=true"
objHTTP.Open "POST", Authurl, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-Type", "application/json"
objHTTP.setRequestHeader "Accept", "application/vnd.api+json"
objHTTP.setRequestHeader "Authorization", "Bearer " & Token
Debug.Print Authurl
payload = "{""url"":""https://www.muenster.de/muenster_media/Anreisser/verspoel_200-height-140-width-200.jpg""}"

Hi Uwe,

Du hattest das ja schon auf Add images via Shopware 6 API / VBA by URL - Stack Overflow gefragt :slight_smile:

Eigentlich müsste das ja funktionieren. Leider habe ich kein VBA um das zu testen.

Hast du die Möglichkeit das im Shop zu debuggen? (xdebug)

Ansonsten hatte ich dir ja empfohlen mal an diese Stelle im Code:

ein

var_dump($contentType); var_dump($request); die()

einzubauen um zu sehen, ob der Content-Type header richtig erkannt wird.

Grüße,

Alex

Ich vermute eigentlich, dass das Problem irgendwo am VBA liegt.

Bitte benutze mal bei dem Upload Request eine Mock-URL, z.B.

url = "https://shopware-forum-uwe-vba-bild-upload.free.beeceptor.com"

Die Requests sind dann hier zu sehen: #shopware-forum-uwe-vba-bild-upload - Rest API Mock Server

Vielleicht sehen wir da den Fehler.

Hi Alex,

danke für die Unterstützung. Den Faden bei stack overflow hatte ich nicht mehr im Blick, weil der geschlossen wurde.

Die Mockurl habe ich getestet, sehe aber keine requests. :frowning:

Die Zeile in MediaService.php habe ich eingebaut, sehe aber im log oder im symfony profiler nix. xdebug kann ich leider nicht nutzen.

Siehst du bei VBA die Response? da müsste auch das Ergebnis des var_dump stehen…

Anscheinend hängt WinHttp.WinHttpRequest.5.1 an den content-type aus irgendeinem Grund noch den charset an:

content-type: „application/json; Charset=UTF-8“

Ich habe als workaround das script MediaService.php geändert. Dann funktioniert es!

124: if (strpos($contentType,'application/json')  !== false))

Vielen Dank für den Hinweis.

Wow, cool :smiley:
Eigentlich könnte man das als Pullrequest / Issue einreichen, der Charset=UTF-8 tangiert den Content Type ja nicht.