我正在尝试通过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"
}
]
}
}
我没有错误,一切似乎都在工作,除了响应 - > 发布和响应 - > media_details 为空或空。当然图像本身没有上传。
根据此GitHub WP-API Adding Media票证,我应该发送2个请求。第一个POST
请求应返回带有post对象的数据。我会通过PUT
方法发送这个帖子对象,并且应该上传图片...因为我没有帖子对象,所以这是不可能的。
任何想法我做错了什么?
答案 0 :(得分:17)
wordpress api不支持侧载图像,因此您必须进行一些更改。
首先,您的content-type应该是 image / jpeg 而不是 application / json ,请记住内容类型应该反映您的数据传递和POST媒体请求需要一个图像。
为了适应内容类型,您必须进行的另一项更改是传递数据的方式。不要使用source_url参数发送它,而是尝试将其作为二进制文件传递。
我要提到的最后一件事是wp / v2调用会在几次返回3XX状态。遵循这些重定向并将这些请求重做到这些新URL会很有用。
我在传递JPEG图像方面遇到了一些问题,但PNG图像运行良好。这是我用来上传png媒体的卷曲示例:
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 d29yZHByZXNzOndvcmRwcmVzcw==" \
--header "content-type: image/png" \
--data-binary "@/home/web/tmp.png" \
--location
答案 1 :(得分:3)
我使用PHP cUrl的工作答案
fourvalue = [2,6,8,1,19]
puts fourvalue.max
puts fourvalue.min
答案 2 :(得分:1)
在尝试使用wp_remote_post运行图像上传(出于多种原因不想使用curl)后,我想出了以下可行的解决方案:
// Upload image to wordpress media library
$file = @fopen( 'image.jpg', 'r' );
$file_size = filesize( 'image.jpg' );
$file_data = fread( $file, $file_size );
$args = array(
'headers' => array(
'Authorization' => 'Basic ' . base64_encode( 'USERNAME:PASSWORD' ),
'accept' => 'application/json', // The API returns JSON
'content-type' => 'application/binary', // Set content type to binary
'Content-Disposition' => 'attachment; filename=nameoffileonserver.jpg'
),
'body' => $file_data
);
$api_response = wp_remote_post( 'http://myserver.com/wp-json/wp/v2/media', $args);
答案 3 :(得分:1)
在2020年1月使用带有nginx的wordpress 5.3.2的解决方案对我来说是
Comment.query.join(Comment.category).with_entities(
Comment.category_id, Category.category_name, Comment.comment_desc
).all()
该令牌是Authorization JWT令牌,而$ archivo是文件路径。
答案 4 :(得分:1)
对于正在寻找JS解决方案的任何人,这就是我使用Axios使它起作用的方式。我将跳过授权实现,因为周围有一些选项(oAuth,JWT,Basic)。
#include <iostream>
#include <string>
int main(int, char**){
auto s = std::string("a") + "b" + "c";
std::cout << "s = " << s << '\n';
return 0;
}