由于获取而如何下载档案?节点js

时间:2018-12-26 11:48:34

标签: node.js download fetch geo

我在处理此请求,但没有下载内容,也没有错误。此请求中我的错误在哪里?我必须添加什么才能获得响应?

  '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 :(得分:0)

您不能像这样在node.js中下载文件。提取文件后,您需要将其写入流中,以便浏览器可以下载它。

我不确定如何使用fetch库来实现这一点,但是您可以像下面这样简单地使用request来实现此目的。

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')

答案 1 :(得分:0)

下载没有任何插件的文件:

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);
});