作为一个web前端开发,对axios肯定不陌生,但是在前端开发中,一般是使用axios来请求后端接口,获取数据。而使用node+axios下载网络文件到本地磁盘可能很少接触,搜索了很多相关的博客文章,看的还是一知半解,,于是就亲自写个demo。所以本文就记录一下实践方法。

Node+Axios下载图片
初始化项目
npm init -y
安装axios
npm i -S axios
实现逻辑
- 根目录下新建
app.js 
// app.js
const axios = require('axios');
const fs = require('fs');
async function loadImg(imgUrl) {
  let { data } = await axios({
    url: imgUrl,
    headers: {
      'Content-Type': 'multipart/form-data',
    },
    responseType: 'arraybuffer',
  })
  await fs.promises.writeFile(`./01.jpg`, data, 'binary');
}
;(async function () {
  let url = 'https://tiven.cn/static/img/img-post-08-c1kr9HQ13lTEmcyI_mowX.jpg'
  console.time('download time:')
  try {
    await loadImg(url)
    console.log('下载成功')
  } catch (err) {
    console.log(err)
  }
  console.log('')
  console.timeEnd('download time:')
})();
说明:
- 
axios的参数headers中Content-Type默认是application/json,需要设置为multipart/form-data; - 
responseType默认是json,需要设置为arraybuffer(二进制格式); - 
writeFile方法的第三个参数encoding默认是utf8,必须设置为binary(二进制格式),如果不设置,下载的文件打不开。 - 
console.time和console.timeEnd是node中提供的计时方法。 
执行
node app.js
- 输出
 
下载成功
download time:107.866ms
如果想要批量爬取某个网站的图片或其他文件,可以使用node爬虫工具cheerio来实现。
参考文档:
- http://nodejs.cn/api/fs.html#fs_fs_writefile_file_data_options_callback
 - http://www.axios-js.com/docs/#Request-Config
 
《node+axios服务端文件上传下载》系列
欢迎访问:个人博客地址