1

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');
            });             
        }       
    );
4

1 に答える 1

0

私はいくつかのテストの後に解決策を得ました。

この問題の理由は、「utf8」エンコーディングでhttp本文を受信して​​いるためです。'binary'エンコーディングを使用すると修正できます。

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"});

解決策:リクエストモジュールを使用してファイルをダウンロードします。コードは以下の通りです。

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){..});
于 2012-12-19T06:35:13.143 に答える