Upload image to WordPress.com Gallery with REST API

I’m trying to upload an image to a WordPress.com blog via their REST API. According to their documentation, I should be able to use the new post endpoint to do so. I’m currently using Rails and rest-client to successfully create text posts using the following code (post_hash contains all the post information):

  url = "https://public-api.wordpress.com/rest/v1/sites/" + @blog.external_id + "/posts/new"
  params = {
      pretty = true,
      title: post_hash[:post_title],
      content: post_hash[:post_content],
      categories: post_hash[:terms_names][:category],
      tags: post_hash[:terms_names][:post_tag]
  }
  headers = { authorization: "Bearer " + @oauth_token, content_type: :json }
  RestClient.post(url, params, headers)

As I mentioned, this works perfectly. Now, I’d like to be able to upload a new image to the blog’s Gallery by creating a new “post” with the image attached. I’m trying to use this code to do so (image is a CarrierWave file stored on Amazon S3):

Read More
  url = "https://public-api.wordpress.com/rest/v1/sites/" + @blog.external_id + "/posts/new"
  image_data = open(image.to_s, "rb").read
  params = {
      format: "image", 
      media: [image_data], 
      multipart: true
  }
  headers = { authorization: "Bearer " + @oauth_token, content_type: image.content_type }
  RestClient.post(url, params, headers)

This does not work and keeps giving me a 400 Bad Request error. If anyone has any suggestions as to what I’m doing wrong or advice on a better way of doing this, I’d greatly appreciate it. Thanks!

Related posts

Leave a Reply