# Image Upload über REST API

**URL:** <https://forum.shopware.com/t/image-upload-uber-rest-api/70465>\
**Category:** Programmierung\
**Created:** [27. Oktober 2020 um 10:54 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465 "2020-10-27T10:54:47Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [27. Oktober 2020 um 10:54 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/1 "2020-10-27T10:54:47Z")

</div>

Hallo, ich versuche derzeit einen ImageUpload über die REST API von SW 6. An sich halte ich mich an die Anleitung im Link:

[https://forum.shopware.com/discussion/61982/produkt-bilder-ueber-api-hochladen](https://forum.shopware.com/discussion/61982/produkt-bilder-ueber-api-hochladen) jedoch bekomme ich immer die Meldung malformed url.

Unverständlich ist für mich auch, dass die User im Link nur Bilder von Websiten nutzen. Ich möchte allerdings Medien von meinem eigenen PC hochladen und im Nachgang an Produkte heften.

Ist das genauso möglich?

 ![](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/2X/c/ce2a73260ac147d37b5219f4f3bc4837138ec6a6.png)

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [28. Oktober 2020 um 16:27 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/2 "2020-10-28T16:27:31Z")

</div>

Du kannst nicht einfach einen Ordner deiner Festplatte in der URL angeben. Das Bild muss direkt als binärer Datenstream in einem Post Request geschickt werden.

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [28. Oktober 2020 um 16:30 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/3 "2020-10-28T16:30:09Z")

</div>

Hey Thomas vielen Dank für dein Feedback. Das habe ich jetzt soweit begriffen.

Hast du eventuell ein Beispiel wie das ganze dann binär im Post Request und Payload aussieht?

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [28. Oktober 2020 um 16:49 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/4 "2020-10-28T16:49:18Z")

</div>

Tuts Python? Da könnte ich was zusammensuchen!

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [29. Oktober 2020 um 07:47 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/5 "2020-10-29T07:47:45Z")

</div>

Okay klar

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 08:10 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/6 "2020-10-29T08:10:08Z")

</div>

Es ist alles ganz einfach \*hust\* \*hust\*

```
import os
import uuid
import json
import requests

url = 'http://xxx'
userid = 'xxx'
userpass = 'yyy'

##### LOGIN #####
requrl = url + '/api/oauth/token'
payload = {'client_id': 'administration', 'grant_type': 'password', 'scopes': 'write', 'username': userid, 'password': userpass}
r = requests.post(requrl, json=payload)
r = json.loads(r.text)
token = r['access_token']

filename = "c:\\ente.jpg"
mediaFolderID = "2376786d815f428daa9efbed4d455c3e"

##### PREPARE NEW PICTURE ID #####
requrl = url + "/api/v3/media?_response=basic"
payload = {"mediaFolderId": mediaFolderID}
headers = {"Accept": "application/json", "Authorization" : "Bearer " + token}
r = requests.post(requrl, json=payload, headers=headers)
r = json.loads(r.text)
mediaID = r["data"]["_uniqueIdentifier"]

##### PUT NEW PICTURE IN THIS ID #####
requrl = url + "/api/v3/_action/media/" + mediaID + "/upload" + "?_response=basic"
requrl += "&extension=" + os.path.split(filename)[-1].split(".")[-1]
requrl += "&fileName=" + os.path.split(filename)[-1].split(".")[0]
headers = {"Accept": "application/json", "Authorization" : "Bearer " + token}
with open(filename, "rb") as f:
    r = requests.post(requrl, headers=headers, data=f)

##### PATCH PRODUCT PICTURE #####
requrl = url + "/api/v3/product/" + prodid + "?_response=basic"
headers = {"Accept": "application/json", "Authorization" : "Bearer " + token}
payload = {"media": [{"mediaId": mediaID, "position": 0}]}
r = requests.patch(requrl, json=payload, headers=headers)
r = json.loads(r.text)

##### GET MEDIA ID OF NEW PRODUCT PICTURE #####
requrl = url + "/api/v3/product/" + prodid + "/media" + "?_response=basic"
headers = {"Accept": "application/json", "Authorization" : "Bearer " + token}
r = requests.get(requrl, json=payload, headers=headers)
r = json.loads(r.text)
newMediaID = r["data"][0]["_uniqueIdentifier"]

##### PATCH PRODUCT PICTURE AS COVER #####
requrl = url + "/api/v3/product/" + prodid + "?_response=basic"
headers = {"Accept": "application/json", "Authorization" : "Bearer " + token}
payload = {"coverId": newMediaID}
r = requests.patch(requrl, json=payload, headers=headers)
r = json.loads(r.text)

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [29. Oktober 2020 um 12:35 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/7 "2020-10-29T12:35:04Z")

</div>

Hallo Thomas,

&nbsp;

danke für das Beispiel. Wen ich das ganze so ausführe erhalten ich ein leeres Bild mit Namen im Shop. Ich verstehe noch nicht so ganz an welcher Stelle du das Bild als binären Datenstrom an den Post Request übergibst.

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 12:38 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/8 "2020-10-29T12:38:20Z")

</div>

hier:

```
with open(filename, "rb") as f:
    r = requests.post(requrl, headers=headers, data=f)

```

f ist das bild.

Weiter oben würde dateiname gesetzt. Evtl. ist der bei dir nicht richtig gesetzt?

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 13:00 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/9 "2020-10-29T13:00:23Z")

</div>

Hast du evtl. den falschen Endpunkt? In meiner URL die ich ansteuere kommt kein ‘\_action’ vor und auch die Meldung “you must provide a valid url” bekomme ich nicht obwohl ich garkeine URL angebe!

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [29. Oktober 2020 um 13:05 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/10 "2020-10-29T13:05:32Z")

</div>

```
##### PUT NEW PICTURE IN THIS ID #####
requrl = url + "/api/v3/_action/media/" + mediaID + "/upload" + "?_response=basic"
requrl += "&extension=" + os.path.split(filename)[-1].split(".")[-1]
requrl += "&fileName=" + os.path.split(filename)[-1].split(".")[0]
headers = {"Accept": "application/json", "Authorization" : "Bearer " + token}
with open(filename, "rb") as f:
    r = requests.post(requrl, headers=headers, data=f)

```

&nbsp;

&nbsp;

Schreibst du hier nicht auf ‚\_action‘ in deine URL?

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 13:10 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/11 "2020-10-29T13:10:12Z")

</div>

nope, meine url ist:

```
url = 'https://www.meinshop.de'

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [29. Oktober 2020 um 13:19 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/12 "2020-10-29T13:19:05Z")

</div>

Moment ja das habe ich ja schon verstanden aber beim Bilderupload hängst du an die URL doch das /api/v3/\_action/media… oder nicht?

Du schreibst doch in der Zeile:

```
requrl = url + "/api/v3/_action/media/" + mediaID + "/upload" + "?_response=basic"

```

&nbsp;

`übersetzt also: requrl = https://www.meinshop.de/api/v3/_action/media... oder muss ich das _action durch etwas ersetzen?`

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 13:24 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/13 "2020-10-29T13:24:10Z")

</div>

oh ja… sorry, dann bin ich in der zeile verrutscht. Bildhochladen ist ja auch ned unbedingt einfach bei Shopware ☹

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [29. Oktober 2020 um 13:27 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/14 "2020-10-29T13:27:59Z")

</div>

Haha kein Problem. Ich bin schon so sehr froh, dass du so sehr versuchst mir zu helfen.

Leider bekomme ich dennoch die Fehlermeldung. Hast du noch eine Idee woran das liegen könnte?

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 13:30 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/15 "2020-10-29T13:30:30Z")

</div>

Du kannst mal versuchen den Request mit Wireshark mitzuschneiden. Solangs nicht über https geht siehst du dann alles was nötig ist.

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [29. Oktober 2020 um 13:38 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/16 "2020-10-29T13:38:00Z")

</div>

Hmm leider ist es https.

&nbsp;

Hat dein Script wie du es oben geschrieben hast funktioniert?

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 13:45 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/17 "2020-10-29T13:45:21Z")

</div>

klar! Sonst hätt ich es nicht gepostet.

Funktioniert problemlos und ist häufig im Einsatz.

---

<div class="post-metadata">

**Author:** ![BastianHbner](https://avatars.discourse-cdn.com/v4/letter/b/5f8ce5/32.png) [@BastianHbner](https://forum.shopware.com/u/BastianHbner)\
**Post date:** [29. Oktober 2020 um 14:07 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/18 "2020-10-29T14:07:04Z")

</div>

Könntest du mir mal die Ausgabe von f zeigen?

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 14:10 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/19 "2020-10-29T14:10:47Z")

</div>

Müsste das hier sein:

&nbsp;

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [29. Oktober 2020 um 14:11 UTC](https://forum.shopware.com/t/image-upload-uber-rest-api/70465/20 "2020-10-29T14:11:26Z")

</div>

Hast du die

```
mediaFolderID

```

richtig?

[Nächste Seite](https://forum.shopware.com/t/image-upload-uber-rest-api/70465.md?page=2)
