2016-10-12 8 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); 
    } 
});