无法使用 Wordpress REST API (Node JS) 上传图像文件
Can't upload image file using Wordpress REST API (Node JS)
我正在构建一个 Node.js 应用程序,它必须使用其 REST API.
在 Wordpress.com 上创建 posts
问题是 Wordpress 不接受我尝试上传的图像文件。
这是我收到的错误消息:
File is empty. Please upload something more substantial.
我尝试将文件作为原始 Node.js Buffer
或 base64
字符串传递,但结果是一样的。
Here is the Wordpress documentation for this request.
创建没有图像的 post 没有问题。
我还可以通过传递 media_urls
参数来创建图像 post。
但是我无法上传本地文件。所以我认为问题是我将原始文件数据传递给 Wordpress 的方式。
以下是我如何读取文件数据并向 Wordpress API 发出请求(我使用 npm request library 进行请求)。
var localImage = fs.readFileSync('local/path/to/image.jpg');
var anotherImageHostedElsewhere = 'http://example.com/image.jpg';
var url = `https://public-api.wordpress.com/rest/v1.1/sites/${myBlogId}/posts/new`;
var headers = {
'Content-Type': 'multipart/form-data',
'Authorization': 'Bearer ' + myAccessToken
}
var formData = {
title: 'Post title',
content: 'Post body',
media: [localImage], //this image fails to upload
media_urls: [anotherImageHostedElsewhere] //this image is attached ok
}
var requestOptions = {
url: url,
headers: headers,
formData: formData
}
request.post(requestOptions, function(error, response, body) {
console.log(JSON.parse(body));
});
顺便说一句,我可以毫无问题地将相同的原始文件上传到另一个 APIs(例如 Twitter 或 Imageshack)。
我对 Wordpress 的另一个请求也没有问题 API。
非常感谢您的帮助。
您需要更改请求的 formData
以指定媒体,如下所示:
var formData = {
title: 'Post title',
content: 'Post body',
'media[0]': fs.createReadStream('local/path/to/image.jpg')
}
任何额外的媒体都应该增加索引。您可以类似地通过索引指定属性:
'media_attrs[0][caption]': 'My Great Photo'
我正在构建一个 Node.js 应用程序,它必须使用其 REST API.
在 Wordpress.com 上创建 posts问题是 Wordpress 不接受我尝试上传的图像文件。
这是我收到的错误消息:
File is empty. Please upload something more substantial.
我尝试将文件作为原始 Node.js Buffer
或 base64
字符串传递,但结果是一样的。
Here is the Wordpress documentation for this request.
创建没有图像的 post 没有问题。
我还可以通过传递 media_urls
参数来创建图像 post。
但是我无法上传本地文件。所以我认为问题是我将原始文件数据传递给 Wordpress 的方式。
以下是我如何读取文件数据并向 Wordpress API 发出请求(我使用 npm request library 进行请求)。
var localImage = fs.readFileSync('local/path/to/image.jpg');
var anotherImageHostedElsewhere = 'http://example.com/image.jpg';
var url = `https://public-api.wordpress.com/rest/v1.1/sites/${myBlogId}/posts/new`;
var headers = {
'Content-Type': 'multipart/form-data',
'Authorization': 'Bearer ' + myAccessToken
}
var formData = {
title: 'Post title',
content: 'Post body',
media: [localImage], //this image fails to upload
media_urls: [anotherImageHostedElsewhere] //this image is attached ok
}
var requestOptions = {
url: url,
headers: headers,
formData: formData
}
request.post(requestOptions, function(error, response, body) {
console.log(JSON.parse(body));
});
顺便说一句,我可以毫无问题地将相同的原始文件上传到另一个 APIs(例如 Twitter 或 Imageshack)。
我对 Wordpress 的另一个请求也没有问题 API。
非常感谢您的帮助。
您需要更改请求的 formData
以指定媒体,如下所示:
var formData = {
title: 'Post title',
content: 'Post body',
'media[0]': fs.createReadStream('local/path/to/image.jpg')
}
任何额外的媒体都应该增加索引。您可以类似地通过索引指定属性:
'media_attrs[0][caption]': 'My Great Photo'