Hello,
I am using Magento CE 2.3.4.
I'm trying to update a single entry in a product's media gallery using the REST API. Basically I'm just trying to update the image with a newer image - I don't want to change any other attributes or add a new image.
However, when I make the PUT call, instead of updating that media entry ID with the provided information, Magento actually wipes out the metadata for the existing media entry and creates a new media entry for that product with the provided data. I then end up with two entries for the product, one of which points to the old image and the other points to the new image, whose filename is the same as the original with a "_1" appended, and both the old and new images show up on the site.
Any idea how to work around this?
Existing Data:
[ { "id": 100, "media_type": "image", "label": "Product 5432 image", "position": 0, "disabled": false, "types": [ "image", "small_image", "thumbnail", "swatch_image" ], "file": "/path/to/5432.jpg" } ]
API Request:
POST /rest/V1/products/5432/media/100
Payload:
{ "entry":{ "id":100, "media_type":"image", "label":"5432 image", "position":0, "disabled":false, "types":[ "image", "small_image", "thumbnail", "swatch_image" ], "file":"", "content":{ "base64_encoded_data":"xxx", "name":"5432.jpg", "type":"image/jpeg" } } }
Resulting record:
[ { "id": 100, "media_type": "image", "label": "5432 image", "position": 0, "disabled": false, "types": [], "file": "/path/to/5432.jpg" }, { "id": 101, "media_type": "image", "label": "5432 image", "position": 0, "disabled": false, "types": [ "image", "small_image", "thumbnail", "swatch_image" ], "file": "/path/to/5432_1.jpg" } ]
As I understand it, making a POST call indicates that you're creating a new image. You need to issue a PUT call to update an existing image...
Having said that, I found this question whilst looking for info as I can't actually get the PUT call to work... it results in a 503 error, even though my POST calls create new images with no problem.
Error handling on the API sucks.
Exact same behaviour here. PUT on single mediaGallery entries creates additional ones instead of updating existing ones if the PUT payload contains entry.content. If the payload does not contain entry.content the existing mediaGallery entry is updated as expected.
Hi,
I have updated to 2.3.6 and still face the same issue. Have you managed to find a fix yet?
It was a core bug, please check more details here https://github.com/magento/knowledge-base/blob/main/src/support-tools/patches-available-in-qpt-tool/...
PUT /V1/products/:sku/media/:entryId call creates a new entry rather than replaces the existing one. Fixed in Adobe Commerce 2.3.5