2016-10-12 2 views
0

私はGithubからtar.gzをダウンロードしてファイルシステムに書き込もうとしています。私の現在のコード:Node.js:Githubからtar.gzをダウンロードしてファイルに書き込む

var https = require('https'); 
var fs = require('fs'); 
var zlib = require('zlib'); 

var file = fs.createWriteStream('zeromq-4.1.5.tar.gz'); 
var request = https.get('https://github.com/zeromq/zeromq4-1/releases/download/v4.1.5/zeromq-4.1.5.tar.gz', function(response) { 
    response.pipe(zlib.createGzip()).pipe(file); 
}); 

私はtar xzf zeromq-4.1.5.tar.gzを実行すると、私は次のエラーを取得する:

tar: Unrecognized archive format 
tar: Error exit delayed from previous errors. 
+0

なぜあなたはすでにgzipされているタールをgzippingしていますか?レスポンスを直接writeStreamにパイプするだけです。 – idbehold

答えて

0

問題は、リダイレクトに従わないhttps.getということでした。以下は私のために解決しました:

var https = require('https'); 
var fs = require('fs'); 
var url = require('url'); 

var TAR_URL = 'https://github.com/' + process.env.ZMQ_REPO + '/releases/download/v' + process.env.ZMQ + '/zeromq-' + process.env.ZMQ + '.tar.gz'; 
var FILE_NAME = 'zeromq-' + process.env.ZMQ + '.tar.gz'; 

function writeToFile(response) { 
    response.pipe(fs.createWriteStream(FILE_NAME)); 
} 

https.get(TAR_URL, function(response) { 
    if (response.statusCode > 300 && response.statusCode < 400 && response.headers.location) { 
    if (url.parse(response.headers.location).hostname) { 
     https.get(response.headers.location, writeToFile); 
    } else { 
     https.get(url.resolve(url.parse(TAR_URL).hostname, response.headers.location), writeToFile); 
    } 
    } else { 
    writeToFile(response); 
    } 
}); 
関連する問題