【问题标题】:Node.js: Download a tar.gz from Github and write to fileNode.js:从 Github 下载 tar.gz 并写入文件
【发布时间】:2016-10-13 04:18:15
【问题描述】:

我正在尝试从 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.

【问题讨论】:

  • 你为什么要压缩一个已经压缩过的tar?只需将响应直接传送到 writeStream。

标签: node.js https tar zlib fs


【解决方案1】:

问题是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);
  }
});

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 2018-12-03
    • 2016-09-11
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多