无法使用 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 Bufferbase64 字符串传递,但结果是一样的。

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'