如何通过API更新/替换/覆盖Shopware 6中的图片
Shopware 6.4 已有图片更新操作方案
你调用的_action路由默认是用于新增媒体资源的,传入已存在的media id会触发系统的重复文件校验,所以会返回文件已存在报错,按照下方对应场景操作即可完成更新:
场景1:替换已有media id对应的图片文件内容
- 需调用
PATCH /api/media/{你的media-id}接口,不要使用新增媒体专用的_action/upload路由,请求头设置为Content-Type: multipart/form-data - 表单参数中除上传的二进制图片文件外,可额外添加
override: true参数跳过默认的文件重复校验 - 请求示例:
curl --location --request PATCH 'https://<你的店铺域名>/api/media/<替换为实际media-id>' \ --header 'Authorization: Bearer <替换为你的API访问令牌>' \ --header 'Accept: application/json' \ --form 'file=@"/本地路径/新图片文件.jpg"' \ --form 'override="true"'
- 请求成功后会返回200状态码,系统会自动更新对应媒体实体的文件哈希、宽高、文件大小等元信息,原有绑定关系(如关联商品、分类)不会改变
场景2:仅更新图片属性(如alt文本、标题、关联关系)无需替换文件
- 直接调用
PATCH /api/media/{你的media-id}接口,使用application/json格式传参即可 - 请求示例:
curl --location --request PATCH 'https://<你的店铺域名>/api/media/<替换为实际media-id>' \ --header 'Authorization: Bearer <替换为你的API访问令牌>' \ --header 'Content-Type: application/json' \ --data-raw '{ "alt": "更新后的图片alt文本", "title": "更新后的图片标题", "position": 2 }'
常见注意事项
- 替换图片完成后如果前台仍展示旧图,需清理Shopware后台缓存及站点CDN缓存,媒体资源默认缓存周期较长
- API访问令牌需要提前开通
media:update权限,否则会返回403无权限报错 - 若需要同时更新图片关联的商品/分类映射关系,需对应调用商品媒体接口
/api/product-media或分类媒体接口/api/category-media的更新接口
内容的提问来源于stack exchange,提问作者Martin Gruhn
相关产品推荐
相关产品推荐

