无法使用node-oauth模块下载文件

时间:2012-12-12 11:34:06

标签: node.js oauth

在Node.js中,我使用下面的代码从服务器下载文件。 API调用成功。在使用“二进制”编码将“数据”保存到本地文件后,相应的软件无法打开本地文件。我比较了本地文件和服务器文件的文件大小。有一点不同。

我找不到我错的地方。 OAuth库是否支持文件下载?

var OAuth = require('oauth').OAuth;

var consumer = new OAuth('',
            null,
            consumer_key, consumer_key_secret, '1.0',
            null, 'HMAC-SHA1');

consumer.get(url
        , oauth_token, ooauth_token_secret
        , function (err, data, response){
            var filename = path.join(__dirname, "test.dwg");
            var file = fs.createWriteStream(filename);

            console.log('Data length: ' + data.length);

            file.write(data, 'binary', function(err){                       
                console.log('Complete');
            });             
        }       
    );

1 个答案:

答案 0 :(得分:0)

经过一些测试后我得到了解决方案。

这个问题的原因是我们以“utf8”编码接收http正文。使用'二进制'编码可以修复它。

oauth模块在获取响应时仅支持utf8编码。这是“#375,response.setEncoding('utf8');”的文件“oatuh \ lib \ oauth.js”中的硬代码。“。

即使我将编码设置为下面的代码。它仍然无法正常工作。所以这个模块不能用于下载二进制文件。

var consumer = new OAuth('',
            null,
            consumer_key, consumer_secret, '1.0',
            null, 'HMAC-SHA1', 32, {encoding: "binary"});

解决方案:使用请求模块下载文件。代码如下。

var oauth = {
    consumer_key: consumer_key
    , consumer_secret: consumer_secret
    , token: token
    , token_secret: token_secret
};
request.get({url:url, oauth:oauth, encoding: "binary"}, function(err, res, body){..});