无法使用Wordpress REST API(节点JS)上传图像文件

时间:2015-11-04 14:39:53

标签: node.js wordpress rest http-post

我正在构建一个Node.js应用程序,它必须使用REST API在Wordpress.com上创建帖子。

问题是Wordpress不接受我试图上传的图片文件。

这是我收到的错误消息:

  

文件为空。请上传更实质的内容。

我尝试将文件作为原始Node.js Bufferbase64字符串传递,但结果是相同的。

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的其他请求也没有问题。

非常感谢您的帮助。

1 个答案:

答案 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'