Как скачать архив с помощью fetch?nodejs - PullRequest
0 голосов
/ 26 декабря 2018

Я делаю этот запрос, но ничего не загружаю и не имеет ошибок. Где моя ошибка в этом запросе?Что я должен добавить, чтобы получить ответ?

  'downloadArchive': async() =>
    {
        console.info( '] downloadArchive' );


        // завантаження архіва
        let archive_body = await fetch( 'https://geolite.maxmind.com/download/geoip/database/GeoLite2-City-CSV.zip',
            {
                method: 'GET',
                headers:
                {
                    'User-Agent'   : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
                }
            } );

        return new Promise(
            ( resolve, reject ) =>
            {

                let archive_write_stream = fs.createWriteStream( config.archive.archive_path );

                archive_write_stream
                    .on( 'error', ( err ) => reject( err ) )
                    .on( 'close', () => resolve() );

                archive_body.body.pipe( archive_write_stream );
            }
        );
    },

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Скачать файл без плагина:

var file = fs.createWriteStream("<Any File Name>.zip");
http.get("https://geolite.maxmind.com/download/geoip/database/GeoLite2-City-CSV.zip", function(response) {
  response.pipe(file);
});
0 голосов
/ 26 декабря 2018

Вы не можете скачать файл в node.js, как это.После того, как вы загрузили файл, вам нужно записать его в поток, чтобы браузер мог загрузить его.

Я не уверен, как добиться этого с библиотекой fetch, но вы можете сделать то же самое просто с запрос как показано ниже.

request('https://geolite.maxmind.com/download/geoip/database/GeoLite2-City-CSV.zip')
  .pipe(fs.createWriteStream('GeoLite2-City-CSV.zip'))
  .on('close', function () {
    console.log('File written!');
  });

ОБНОВЛЕНИЕ: Вы также можете использовать функцию ниже для загрузки вашего файла.

async function download( url, name ) {
  const res = await fetch(url);
  await new Promise((resolve, reject) => {
    const fileStream = fs.createWriteStream(name);
    res.body.pipe(fileStream);
    res.body.on("error", (err) => {
      reject(err);
    });
    fileStream.on("finish", function() {
      resolve();
    });
  });
}

download('https://geolite.maxmind.com/download/geoip/database/GeoLite2-City-CSV.zip', 'GeoLite2-City-CSV.zip')
...