我正在构建一个Node.js应用程序,它必须使用REST API在Wordpress.com上创建帖子。
问题是Wordpress不接受我试图上传的图片文件。
这是我收到的错误消息:
文件为空。请上传更实质的内容。
我尝试将文件作为原始Node.js Buffer
或base64
字符串传递,但结果是相同的。
Here is the Wordpress documentation for this request
创建没有图像的帖子我没有问题。
我也可以通过传递media_urls
param创建一个图像帖子。
但我无法上传本地文件。所以我认为问题是我将原始文件数据传递给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));
});
顺便说一下,将同一个原始文件上传到另一个API(例如Twitter或Imageshack)没有问题。
另外,我对Wordpress API的其他请求也没有问题。
非常感谢您的帮助。
答案 0 :(得分:2)
您需要更改请求的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'