Me gustaría descargar (no clonar) el archivo de mi repositorio de GitLab, pero aparece este error
verificación de encabezado incorrecta (Zlib._handle.onerror)
Esta es mi función:
var fs = require('fs'); var url = require('url'); var https = require('https'); var path = require('path'); var targz = require('tar.gz'); function downloadFile(source, destination, name) { var options = { host: url.parse(source).host, port: 443, path: url.parse(source).pathname }; var file = fs.createWriteStream(destination + path.sep + name); https.get(options, function(res) { res.on('data', function(data) { file.write(data); }).on('end', function() { file.end(); console.log('File ' + name + ' downloaded to ' + destination); targz().extract(destination + '/' + name, destination) .then(function(){ console.log('Job done!'); }) .catch(function(err){ console.log('Something is wrong ', err.stack); }); }); }); }
El archivo que se descarga es del tipo tar.gz. Intento establecer algunos encabezados pero no tengo éxito. El parámetro de origen es como: https://gitlab.com/api/v3/projects/:ID/repository/archive?token=XXYYZZ
¿Alguna ayuda por favor?
El problema es que el módulo https
no descarga correctamente su archivo, lo que da como resultado un error de extracción del módulo tar.gz
Puede usar el módulo de request
coordinado con tar.gz
con createWriteStream
para canalizar la extracción directamente a la carpeta de destino:
var request = require('request'); var targz = require('tar.gz'); function downloadFile(source, destination, cb) { var read = request.get(source); var write = targz().createWriteStream(destination); read.pipe(write); write.on('finish', function() { cb(null); }); write.on('error', function(err) { cb(err); }); } var source = "https://gitlab.com/api/v3/projects/:ID/repository/archive?token=XXYYZZ"; var destination = "/home/user/some/dir"; downloadFile(source, destination, function(err) { if (err) { console.log('Something is wrong ', err.stack); } else { console.log('Job done!'); } });
Tenga en cuenta que, para enviar el evento de finish
, necesitará la versión 1.0.2
de tar.gz
(consulte este problema ):
npm install tar.gz@1.0.2