Anjaly Kiron
Anjaly Kiron

Reputation: 61

Posting multiple images to tumblr using tumblr.js api

I am trying to creating a app which can send posts to tumblr using tumblr.js api. I could send single image using the createPhotoPost method, but I have to send multiple image in a single post via this method.

From the documentation it says that createPhotoPost method has a "data" parameter which can be an array with "URL-encoded binary contents"

When ever I try to send something in the data Array it returns "[Error: form-data: Arrays are not supported.]".

Can someone please help to solve this issue and please explain what should we pass in the array (Really I am not getting what is URL-encoded binary contents)?

Thanks in advance

Upvotes: 1

Views: 312

Answers (1)

James Andino
James Andino

Reputation: 25779

There is an error in tumblr.js https://tumblr.github.io/tumblr.js/tumblr.js.html#line504

The documentation at https://www.tumblr.com/docs/en/api/v2#posting is correct.

Basically the issue is that its not supposed to be
data = [ one , two ]
its litterally
params['data[0]'] = one ; params['data[1]'] = two; (?A PHP Convention)


var request = require('request')// already a tumblr.js dependency

var currentRequest = request({
              url:'https://api.tumblr.com/v2/blog/someblog.tumblr.com/post',
                     oauth:keys,
                  },function(err,response,body){
                      currentRequest//
                      debugger

                    cb()
                  })

                  var params = {
                    'type'   :'photo',
                    'caption':'Click To Verify You Are A Robot',
                  }


                  var params_images = [
                    fs.createReadStream('image'),
                    fs.createReadStream('image')
                  ]


                    // Sign it with the non-data parameters
                    currentRequest.form(params)
                    currentRequest.oauth(keys);

                    // Clear the side effects from form(param)
                    delete currentRequest.headers['content-type'];
                    delete currentRequest.body;

                    // And then add the full body
                    var form = currentRequest.form();


                    //@@@add params_images to params keys 'data[0]' 'data[1]' 'data[2]' ....

                    params_images.forEach(function(image,index){
                      params['data['+index+']']
                    })

                    for (var key in params) {
                        form.append(key, params[key]);
                    }

                    // Add the form header back
                    var form_headers = form.getHeaders()
                      for(var key in form_headers){
                      currentRequest[key] = form_headers[key]
                    }

Upvotes: 1

Related Questions