在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');
});
}
);
答案 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){..});