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
:
はgzip
オプションを有効にし、request
で解凍を有効にするには。 – Lazyexpertまた、パイプを削除して通常のコールバックを追加して、コンテンツの受信方法を確認することもできます。 – Lazyexpert
'1f8b'(最初の2バイト)は、データがgzipで圧縮されていることを示します。' request'に渡されるオプションに 'gzip:true'を設定しようとします。 – robertklep