box-node-sdk 正在下载共享 public 文件

box-node-sdk downloading a shared public file

我正在制作一个 NodeJS 应用程序,它应该下载一个文件,因为 public 共享 URL 不请求登录身份验证。 我已经在开发人员部分创建了应用程序并生成了正确的令牌。

在 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+)$/,"");

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 下载 public 共享文件吗?

提前致谢!

目前我找到了这个解决方案。

对我来说效果很好。我希望它对其他人也有用。

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