Shopware二进制内容上传媒体失败,求请求配置及Body示例
Shopware Admin API 二进制媒体上传请求构造指南
核心请求结构
- 请求方法:POST
- 目标端点:
/api/_action/media/upload
必备请求头
必须设置以下HTTP头,少一个都可能导致上传失败:
Authorization:Bearer {你的Admin API令牌}Content-Type: 匹配图片的MIME类型,比如image/jpeg、image/png、image/webpFilename: 上传后媒体文件的名称,比如product-main.jpgsw-context-token: 后台操作上下文令牌(如果是从Shopware后台发起的请求,这个头是必须的)
请求体要求
直接将图片的二进制内容作为请求体发送,不需要包装成JSON、表单或其他格式,就是图片原始的二进制数据。
示例:用curl上传
curl -X POST \ https://你的Shopware店铺域名/api/_action/media/upload \ -H 'Authorization: Bearer YOUR_ADMIN_API_TOKEN' \ -H 'Content-Type: image/png' \ -H 'Filename: sample-product.png' \ -H 'sw-context-token: YOUR_CONTEXT_TOKEN' \ --data-binary '@/本地图片路径/sample-product.png'
常见踩坑点
- 遗漏
Filename头:API无法识别文件名称,直接返回错误 Content-Type不匹配:比如把PNG图片标注成image/jpeg,会导致媒体无法正常解析- 令牌权限不足:确保你的API令牌拥有
media:create权限 - 错误使用
multipart/form-data:直接传二进制时不能用表单编码的Content-Type,必须用对应图片的MIME类型
代码示例(PHP)
$apiUrl = 'https://你的Shopware店铺域名/api/_action/media/upload'; $token = 'YOUR_ADMIN_API_TOKEN'; $contextToken = 'YOUR_CONTEXT_TOKEN'; $imagePath = '/本地图片路径/shop-logo.png'; $headers = [ "Authorization: Bearer {$token}", "Content-Type: image/png", "Filename: shop-logo.png", "sw-context-token: {$contextToken}" ]; $ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($imagePath)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // 打印返回结果,成功会返回媒体实体的JSON数据 var_dump($response);
内容的提问来源于stack exchange,提问作者Vlora
相关产品推荐
相关产品推荐

