2017-06-30 40 views
0

nodejsサーバにリンクからCSVファイルをダウンロードしてダウンロードした後、解析機能を実行する機能があります。writeStream経由でcsvをダウンロードすると奇妙な結果が発生する

http://myprovider/grails/mgmt/downloadFile.dispatch?uid=12345&username=Lucas&password=Password

function getItemCSVsingle(ItemLinkObject) { 

    var ItemName=ItemLinkObject.nameLabel; 
    var ItemURL=ItemLinkObject.url; 

    var writeStream = fs.createWriteStream(ItemDownloadPath.concat(ItemName).concat('.csv')); 
    writeStream.on('finish', function() {   
     loadItemCSV(ItemName); 
    }) 
    request({ 
     method: 'GET', 
     uri: ItemURL, 
    }).pipe(writeStream) 
} 

しかし、その後私たちのデータプロバイダは、基本認証を必要とするリンクに切り替え:

URLは次の形式です。

新しい機能は次のようになります - と私が作成したURLはコピーしてChromeに貼り付けると問題なく動作しますので、有効です。作品によると、結果としてCSVファイルがダウンロードされるということです。

function getItemCSVwithAuth(ItemLinkObject) { 

    var ItemName=ItemLinkObject.nameLabel; 
    var ItemURL='https://'+username+':'password+'@'+ItemLinkObject.url; 

    var writeStream = fs.createWriteStream(ItemDownloadPath.concat(ItemName).concat('.csv')); 
    writeStream.on('finish', function() {  
     loadItemCSV(ItemName); 
    }) 
    request({ 
     method: 'GET', 
     uri: ItemURL,  
    }).pipe(writeStream) 
} 

の問題は、私は私のノードサーバ上でこの要求を実行すると、結果のCSVファイルは非常に奇妙であるということである(代わりに予想される2キロバイトの)唯一の440バイトと私は崇高でそれを開いたときには、次のようになります。

1f8b 0800 0000 0000 0400 a594 dd6a dc30 
1085 ef0b 7d07 3f80 6035 3fd2 48bd dba4 
49ae 5296 26f4 dec4 4a10 ac63 70ec bc5c 
2ffa 487d 858e b7a1 6c31 1595 8397 99c5  
307a f1a5 1608 0000 
+0

gzipオプションを有効にし、requestで解凍を有効にするには。 – Lazyexpert

+0

また、パイプを削除して通常のコールバックを追加して、コンテンツの受信方法を確認することもできます。 – Lazyexpert

+0

'1f8b'(最初の2バイト)は、データがgzipで圧縮されていることを示します。' request'に渡されるオプションに 'gzip:true'を設定しようとします。 – robertklep

答えて

1

応答、1f8bの最初の2つのバイトは、通常、クライアントは、具体的には、このような圧縮をサポートするサーバーを教えてあるが、応答は、gzipで圧縮された(HTTP応答の一般的であるであることを示していますそれは私が考えていないと思いますrequest)。私は、問題の原因を特定するために郵便配達をしようと

request({ 
    method : 'GET', 
    uri : ItemURL, 
    gzip : true, 
}).pipe(writeStream) 
関連する問題