2017-02-13 5 views
0

Ich mache eine NodeJS-App, die eine Datei mit der öffentlichen Freigabe-URL herunterladen soll, die keine Login-Authentifizierung anfordert. Ich habe die App im Entwicklerbereich erstellt und die richtigen Tokens generiert.box-node-sdk Herunterladen einer freigegebenen öffentlichen Datei

Auf der Git-Dokumentation habe ich diese Methode gefunden, die zum Herunterladen einer Datei verwendet werden sollte. Der erste Parameter ist der fileId, aber ich finde nirgends geschrieben, was diese ID ist und wo sie zu finden ist. https://rawgit.com/box/box-node-sdk/master/docs/jsdoc/Files.html#getReadStream

Ich habe diesen Code versucht

var fs  = require('fs'), 
    BoxSDK = require('box-node-sdk'), 
    sdk  = new BoxSDK({ 
     clientID: '...', 
     clientSecret: '...' 
    }), 
    client = sdk.getAnonymousClient(), 

    file_id = process.argv[2].replace(/\S*\/(\S+)$/,"$1"); 

client.files.getReadStream(file_id, null, function(error, stream) 
{ 
    if (error) { 
     throw error; 
    } 

    // write the file to disk 
    var output = fs.createWriteStream('./output/'+file_id+".zip"); //I know for sure there will only be zip files 
    stream.pipe(output); 
}); 

Aber es mit diesem Befehl

nodejs index.js https://adrime.box.com/s/s5w7lzm4xfifmxrod9r7eeniv9nhtenk 

ich diesen Fehler ausgeführt wird:

Error: Unexpected API Response [404 Not Found] (not_found: "Not Found") 
    at Object.module.exports.buildResponseError (/home/andrea/dev/node/box_api/node_modules/box-node-sdk/lib/util/errors.js:57:23) 
    at Object.module.exports.buildUnexpectedResponseError (/home/andrea/dev/node/box_api/node_modules/box-node-sdk/lib/util/errors.js:94:15) 
    at /home/andrea/dev/node/box_api/node_modules/box-node-sdk/lib/managers/files.js:148:20 
    at BoxClient._handleResponse (/home/andrea/dev/node/box_api/node_modules/box-node-sdk/lib/box-client.js:291:2) 
    at handleResponseCallback (/home/andrea/dev/node/box_api/node_modules/box-node-sdk/lib/box-client.js:233:9) 
    at /home/andrea/dev/node/box_api/node_modules/box-node-sdk/lib/api-request.js:285:3 
    at nextTickCallbackWith0Args (node.js:436:9) 
    at process._tickCallback (node.js:365:13) 

mir jemand in programmatisch helfen kann eine öffentlich freigegebene Datei von box.com herunterladen?

Vielen Dank im Voraus!

Antwort

0

Im Moment habe ich diese Lösung gefunden.

Für mich funktioniert es ziemlich gut. Ich hoffe, es wird auch anderen nützlich sein.

var fs   = require("fs"), 
    request = require("request"); 

function downloadFile(source, target, callback) 
{ 
    var wr = fs.createWriteStream(target); 

    wr.on("error", function (err) 
    { 
     callback(err); 
    }); 

    wr.on("close", function (ex) 
    { 
     callback(); 
    }); 

    request 
     .get(source) 
     .on("error",function(err) 
     { 
      callback(err); 
     }) 
     .on('response', function(response) 
     { 
      if((""+response.statusCode).charAt(0) != "2") 
       callback({ 
         msg: "File not found: "+response.request.href, 
         path: response.request.href, 
         toString: function(){ 
          return this.msg; 
         } 
        }); 
     }) 
     .on("end", function (ex) 
     { 
      console.log("request ended"); 
     }) 
    .pipe(wr); 
} 

function onDownloadComplete(err) 
{ 
    if(err) 
     throw err; 

    console.log("DOWNLOAD COMPLETE"); 
} 

function init() 
{ 
    var static_url = process.argv[2].replace(/\/s\//,"/shared/static/") + ".zip"; 
    console.log(static_url); 

    downloadFile(static_url, "./output/template.zip", onDownloadComplete); 
} 

init(); 
Verwandte Themen