node.jshttpaxiosmedium.com-publishing-api

axios equivalent of http requests?


I want to make the following http request

POST /v1/images HTTP/1.1
Host: api.medium.com
Authorization: Bearer 181d415f34379af07b2c11d144dfbe35d
Content-Type: multipart/form-data; boundary=FormBoundaryXYZ
Accept: application/json
Accept-Charset: utf-8

--FormBoundaryXYZ
Content-Disposition: form-data; name="image"; filename="filename.png"
Content-Type: image/png

IMAGE_DATA
--FormBoundaryXYZ--

It is Medium API

I have attempted following.

var axios = require("axios")

var data = (await axios("https://example.com/image.png")).data;

axios.post("https://api.medium.com/v1/images",{image: data},{
headers: {
 "Content-Type" : "multipart/form-data",
 "Authorization" : "Bearer " + process.env.key
}
}).then(x=>console.log(x.data))

And I get following error.

Error: Request failed with status code 400

It uses Medium API to upload image, I want to fetch a remote image, and convert it into multipart/form-data and upload it via API, the HTTP request seems confusing, I want the equivalent axios code, someone please help?


Solution

  • Try using FormData instead of plain object?

    Example should be like this

    const formData = new FormData();
    formData.append('image', data);
    axios.post('https://api.medium.com/v1/images', formData, {
      headers: {
        "Content-Type" : "multipart/form-data",
        "Authorization" : "Bearer " + process.env.key
      }
    });
    

    Reference: How to post a file from a form with Axios