我正在this exact question, 2015年被问及关于通过WP REST API添加媒体的问题。
迄今为止我的代码:
curl -s -X POST http://www.example.com/wp-json/wp/v2/media/ -H "Content-Type: application/json" -H "Content-Disposition: attachment; filename=image.png" -H "Authorization: Basic $base64credentials " -d \'{"title":"mymedia", "alt-text":"", "caption":"", "description":"", "slug":"myslug", "status":"publish", "date":"2019-01-16T00:00:00", "post":$id}\'
我目前的结果:
{"code":"rest_upload_sideload_error","message":"Sorry, this file type is not permitted for security reasons.","data":{"status":500}}
当我将扩展替换为
.txt
, 即使文件不存在(??),调用也可以工作,并生成损坏的空媒体对象。其他关于后期创建和后期更新的调用可以正常工作。通过切换到
https
服务器,并使用
curl -k
选项,同样的情况也会发生。
原因可能是基本授权或HTTP或HTTPS问题吗?
今天应该怎么做?
我缺少一些标题或语法?
最合适的回答,由SO网友:Tom J Nowell 整理而成
根据StackOverflow的回答,我怀疑这样的方法会奏效:
base64credentials="...... "
curl --request POST \\
--url "http://www.yoursite.com/wp-json/wp/v2/media" \\
--header "cache-control: no-cache" \\
--header "content-disposition: attachment; filename=tmp" \\
--header "authorization: Basic $base64credentials" \\
--header "content-type: image/png" \\
--data-binary "@/home/web/tmp.png" \\
--location
这应该使用
tmp.png
创建并上载全新附件。然后,您可以解析结果以检索ID或成功/失败,并对其执行其他操作,例如设置特色图像元等。
我确实注意到需要调整授权的资本化,您需要调整内容类型和数据二进制参数以匹配您的目标文件,请告诉我这是怎么回事
https://stackoverflow.com/questions/37432114/wp-rest-api-upload-image
首先,您的内容类型应该是
image/jpeg
而不是
application/json
, 请记住,内容类型应该反映您正在传递的数据,而POST media请求需要图像。
为了适应内容类型,您必须做的另一个更改是传递数据的方式。请尝试将其作为二进制文件传递,而不是使用source\\u url参数发送。
我要提到的最后一件事是,wp/v2调用有时返回3XX状态。跟踪这些重定向并将这些请求重做到这些新URL将非常有用。