在Node.js中,我使用下面的代码从服务器下载文件。API调用成功。在我用‘二进制’编码将'data‘保存到本地文件后,本地文件不能被相应的软件打开。我比较了本地文件和服务器文件的文件大小。这里有一个很小的区别。
我找不到我哪里错了。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');
});
}
);发布于 2012-12-19 14:35:13
经过一些测试,我得到了解决方案。
此问题的原因是我们正在接收'utf8‘编码的http正文。使用‘二进制’编码可以修复它。
oauth模块只有在获取响应时才支持utf8编码。这是文件"oatuh\lib\oauth.js“中”第# 375行,response.setEncoding('utf8');“中的硬代码。
即使我将编码设置为下面的代码。它还是不能工作。所以这个模块不能用来下载二进制文件。
var consumer = new OAuth('',
null,
consumer_key, consumer_secret, '1.0',
null, 'HMAC-SHA1', 32, {encoding: "binary"});Solution:使用request模块下载文件。代码如下所示。
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){..});https://stackoverflow.com/questions/13838842
复制相似问题