Search code examples
node.jshttprequestdropboxdropbox-api

Access files on Dropbox with NodeJS


I am using the Dropbox API with Node JS. I was able to upload files to my Dropbox using HTTP requests, but I am not able to download them with it. My intent is to use HTTP request to view content of the file in the dropbox.

This is the code for uploading files:

var request = require('request')
var fs = require('fs')

var token = "XXXXXXXXXXXXXXXXX"
var filename = "path/to/file/file.txt"

var content = fs.readFileSync(filename)

options = {
            method: "POST",
            url: 'https://content.dropboxapi.com/2/files/upload',
            headers: {
              "Content-Type": "application/octet-stream",
              "Authorization": "Bearer " + token,
              "Dropbox-API-Arg": "{\"path\": \"/files/"+filename+"\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}",
            },
            body:content
};

request(options,function(err, res,body){
     console.log("Err : " + err);
     console.log("res : " + res);
     console.log("body : " + body);    
 })

Now what should the request function be for downloading this file? I was attempting something like this:

var request = require('request')
var fs = require('fs')

var token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
var filename = "path/to/file/file.txt"

var content = fs.readFileSync(filename)

options = {
            method: "GET",
            url: 'https://content.dropboxapi.com/2/files/upload',
            headers: {
              "Content-Type": "application/octet-stream",
              "Authorization": "Bearer " + token,
              "Dropbox-API-Arg": "{\"path\": \"/files/"+filename+"\",\"mode\": \"overwrite\",\"autorename\": true,\"mute\": false}",
            },

};

request(options,function(err, res){
     console.log("Err : " + err);
     console.log("res : " + res);

 })

But the res just gives object Object

How do I download the file?


Solution

  • You failed to download the file because the URL used(https://content.dropboxapi.com/2/files/upload) is incorrect. According to Dropbox API document, the correct URL endpoint is:

    https://content.dropboxapi.com/2/files/download
    

    However, it is better to use npm module such as dropbox to implement the requirement, as it has already wrapped the logic. The code would look like:

    var fetch = require('isomorphic-fetch');
    var Dropbox = require('dropbox').Dropbox;
    var dbx = new Dropbox({ accessToken: 'YOUR_ACCESS_TOKEN_HERE', fetch: fetch });
    dbx.filesDownload({path: '...'})
    .then(function(data) {
      ...
    });