我正在尝试通过WordPress REST API v2上传图片。到目前为止,我所做的一切都是在WordPress媒体库中创建空条目。这意味着它们有图片名称,但没有实际的图片。
POST请求:
http://localhost/wordpress/wp-json/wp/v2/media
Authorization: Basic d29yZHByZXNzOndvcmRwcmVzcw==
Content-Type: application/json
Content-Disposition: attachment;filename=map2.jpg
{
"source_url" : "file:///C:/Users/x/Desktop/map2.jpg"
}
回应:
{
"id": 127,
"date": "2016-05-25T08:43:30",
"date_gmt": "2016-05-25T08:43:30",
"guid": {
"rendered": "http://localhost/wordpress/wp-content/uploads/2016/05/map2-3.jpg",
"raw": "http://localhost/wordpress/wp-content/uploads/2016/05/map2-3.jpg"
},
"modified": "2016-05-25T08:43:30",
"modified_gmt": "2016-05-25T08:43:30",
"password": "",
"slug": "map2-3",
"status": "inherit",
"type": "attachment",
"link": "http://localhost/wordpress/map2-3/",
"title": {
"raw": "map2-3",
"rendered": "map2-3"
},
"author": 1,
"comment_status": "open",
"ping_status": "closed",
"alt_text": "",
"caption": "",
"description": "",
"media_type": "image",
"mime_type": "image/jpeg",
"media_details": {},
"post": null,
"source_url": "http://localhost/wordpress/wp-content/uploads/2016/05/map2-3.jpg",
"_links": {
"self": [
{
"href": "http://localhost/wordpress/wp-json/wp/v2/media/127"
}
],
"collection": [
{
"href": "http://localhost/wordpress/wp-json/wp/v2/media"
}
],
"about": [
{
"href": "http://localhost/wordpress/wp-json/wp/v2/types/attachment"
}
],
"author": [
{
"embeddable": true,
"href": "http://localhost/wordpress/wp-json/wp/v2/users/1"
}
],
"replies": [
{
"embeddable": true,
"href": "http://localhost/wordpress/wp-json/wp/v2/comments?post=127"
}
]
}
}
我没有得到错误,一切似乎都在工作,除了响应-〉post和响应-〉media_details不是null就是空。当然图片本身没有上传。
基于这个GitHub WP-API Adding Media票证,我应该发送2个请求。第一个POST
请求应该返回带有post对象的数据。我将通过PUT
方法发送这个post对象,并且应该上传图像...因为我没有post对象,这是不可能的。
知道我做错了什么吗?
7条答案
按热度按时间esbemjvw1#
wordpress api不支持旁载图片,所以你必须做一些修改。
首先,您的content-type应该是image/jpeg而不是application/json,请记住,内容类型应该反映您传递的数据,POST媒体请求需要图像。
为了适应content-type,您必须进行的另一个更改是传递数据的方式。不要使用source_url参数发送数据,而应尝试将其作为二进制文件传递。
最后我要提到的一件事是,wp/v2调用在一些情况下返回3XX状态,这将是有用的,按照这些重定向和重做这些请求到那些新的url。
我在传递JPEG图像时遇到了一些问题,但PNG图像已经很好地工作了。下面是我用来上传PNG媒体的一个curl示例:
ijnw1ujt2#
我的工作答案使用PHP cUrl
8ehkhllq3#
在2020年1月使用WordPress 5.3.2与nginx的解决方案,为我工作是:
该标记是授权JWT标记,$archivo是文件路径。
iswrvxsc4#
对于任何寻找JS解决方案的人,这里是我如何使用Axios使其工作的。我将跳过授权实现,因为周围有几个选项(oAuth、JWT、Basic)。
pieyvz9o5#
在尝试用wp_remote_post上传图片后(不想使用curl,有几个原因),我提出了以下解决方案:
yquaqz186#
在这里你可以使用这个代码片段。
iqxoj9l97#
如果你想用nuxtjs或vuejs上传一个图片到WordPress rest API,你可以使用下面的代码:
在模板中:
在数据中:
在方法中:
如果你想预览图像,你可以使用文件读取器,并将其存储在一个数据变量中,然后使用数据代替图像源代码,如下面的代码:
我花了一天的时间来解决这个问题,我希望上面的代码能有所帮助