Sanka Darshana
Sanka Darshana

Reputation: 1421

Uploading to dropbox via node js fails

I have the following code to read from a stream and upload to Dropbox. But I'm getting a

Uncaught TypeError: Cannot call method 'toString' of undefined
  at Function.Dropbox.Util.Xhr.Xhr.urlEncodeValue (node_modules\dropbox\lib\dropbox.js:3695:40)
  at Function.Dropbox.Util.Xhr.Xhr.urlEncode (node_modules\dropbox\lib\dropbox.js:3689:59)
  at Xhr.Dropbox.Util.Xhr.Xhr.paramsToUrl (node_modules\dropbox\lib\dropbox.js:3570:40)
  at Xhr.Dropbox.Util.Xhr.Xhr.prepare (node_modules\dropbox\lib\dropbox.js:3598:14)
  at Client.Dropbox.Client.Client._dispatchXhr (node_modules\dropbox\lib\dropbox.js:2137:11)
  at Client.Dropbox.Client.Client.resumableUploadStep (node_modules\dropbox\lib\dropbox.js:1454:19)
  .....

error when I try to run the code.If I give a 'false' as cursor, the error doesn't occur in step function, but still it occures in finish function. Can anyone help me on this?

stream.on('data', function (data) {
    client.resumableUploadStep(data, function (error, cursor) {
       if (error) {
          return  console.log(error);
       }    
    })
});

stream.on('end', function () {
     client.resumableUploadFinish(fileName, function (error, stats) {
         if (error) {
             return callback(error);
         }
         return callback(null, stats);
     });
});

I used the following code and now it works.

var pcursor = null;
var eventObject = new EventEmitter();
var counter = 0;
stream.on('data', function (data) {
    counter++;       
    client.resumableUploadStep(data, pcursor, function (error, cursor) {
            if (error) {                   
                return  callback(error);
            }
            counter--;
            pcursor = cursor;
            eventObject.emit('event');               
     });
});

stream.on('end', function () {
        eventObject.on('event', function () {
            if (counter == 0) {
                client.resumableUploadFinish(fileName, pcursor, function (error, stats) {
                    if (error) {
                        return callback(error);
                    }
                    return callback(null, stats);
                });
                counter = -1;
            }
        });

        eventObject.emit('event');
 });

Upvotes: 0

Views: 347

Answers (1)

user94559
user94559

Reputation: 60143

It looks like you're missing the cursor parameter to resumableUploadFinish. Also, you should be passing in a cursor to resumableUploadStep after the first call too.

I think the code you want is something like this (completely untested):

var cursor = null;
stream.on('data', function (data) {
    client.resumableUploadStep(data, cursor, function (error, new_cursor) {
        cursor = new_cursor;
    });
});
stream.on('end', function () {
    client.resumableUploadFinish(fileName, cursor, function (error, stats) {
        return callback(null, stats);
    });
});

Upvotes: 1

Related Questions