nodejs下载图片的各种姿势

一)axios(arraybuffer) 【推荐姿势】

const fs = require('fs')
const axios = require('axios')

function downloadFile(url,localPath){
  axios.get(url,{responseType: "arraybuffer"})
  .then(async function (response) {
      const bufObj = Buffer.from(await response.data);
      fs.writeFileSync(localPath,bufObj,'binary')
    });
}

二)https(node自带) 【推荐姿势】

const https = require('node:https')
const fs = require('fs')

function downloadFile(url,localPath){
  https.get(url, (res) => {

      var imgData = "";
      res.setEncoding("binary");  // 下载图片需要设置为 binary, 否则图片会打不开

      res.on('data', (chunk) => {
        imgData+=chunk;
      });

      res.on('end', () => {
          fs.writeFileSync(localPath, imgData, "binary");
      });
  });
}

三)其他姿势

xior

官网 https://github.com/suhaotian/xior

import xior from 'xior';
const axios = xior.create();

axios
  .get('https://bit.ly/2mTM3nY', {
    responseType: 'stream',
  })
  .then(async function ({ response, config }) {
    const buffer = Buffer.from(await response.arrayBuffer());
    return writeFile('ada_lovelace.jpg', buffer);
  });

got

官网 https://github.com/sindresorhus/got

import got from 'got'

function downloadFile(url,localPath){
  got.stream(url).pipe(fs.createWriteStream(localPath))
}

四)axios(stream)【不推荐】

let config = {
        adapter: "http",
};

function downloadOneFile(url, target, onSuccess, onError) {

    axios.create(config).get(url, {
        responseType: 'stream'
    }).then(response => {
        const writer = createWriteStream(target);
        response.data.pipe(writer);

        writer.on('finish', onSuccess);
        writer.on('error', onError);
    }).catch(onError);
}

这个使用姿势,我这里碰到几个问题:

  1. 要使用 stream,就得使用pipe 输出 。 时常会有出现 data.pipe is not a function. 没了解到原因,不知道为啥。
  2. 在electron 环境中使用, 需要设置 adapter 为http(默认为 xhr)。 但我设置了 adapter为http后。又有问题:Adapter 'http' is not available in the buildgithub问题单 ,目前单子还是open的,没解决。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容