2017-02-13 72 views
0

我正在製作一個NodeJS應用程序,該應用程序應該下載給定公共共享URL的文件,該共享URL不要求登錄授權。 我已經在開發人員部分創建了應用程序並生成了適當的令牌。box-node-sdk下載共享公共文件

在git文檔中,我發現這個方法應該用來下載文件。第一個參數是fileId,但我沒有發現任何地方這個ID是什麼和在哪裏可以找到它。 https://rawgit.com/box/box-node-sdk/master/docs/jsdoc/Files.html#getReadStream

我試過這個代碼

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); 
}); 

但與此命令

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

運行它,我得到這個錯誤:

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) 

誰能幫助我在編程從box.com下載公共共享文件?

預先感謝您!

回答

0

目前我找到了這個解決方案。

對我來說它工作得很好。我希望它對其他人也有用。

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();