2012-12-12 46 views
1

在Node.js中,我使用下面的代碼從服務器下載文件。 API調用是成功的。在用「二進制」編碼將「數據」保存到本地文件後,本地文件無法通過相應的軟件打開。我比較了本地文件和服務器文件的文件大小。有一個小小的區別。無法使用node-oauth模塊下載文件

我找不到我錯在哪裏。 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

我在一些測試後得到了解決方案。

這個問題的原因是我們正在接收'utf8'編碼的http正文。使用「二進制」編碼可以修復它。

oauth模塊在獲取響應時僅支持utf8編碼。這是「Line#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){..});