nodejs 实现图片下载

271 阅读1分钟

方式一:原生js

const fs = require('fs')
const http = require('http')
const userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'


/**
 * 图片下载器
 * @param {string} url - 图片的网络地址
 * @param {string} dest - 保存图片的地址
 * @param {number} timeout - 超时时间,默认 3 分钟
 * @param {number} retries - 重试次数,默认重试 2 次
 */
let isRetry = false
  let req = http.request(url, res => res.pipe(fs.createWriteStream(dest)))
  req.setTimeout(timeout, () => {
    req.abort()
    isRetry = true
  })
  req.setHeader('User-Agent', userAgent)
  req.on('error', () => {
    isRetry = true
  })
  req.on('close', () => {
    // 重试时,将超时时间递增 1 分钟
    if (isRetry && retries > 0) pictureDownloader(url, dest, timeout + 60 * 1000, retries - 1)
  })
req.end()

方式二: request

const request = require("request");
module.exports = function pictureDownloader (url, dest, fn) {
  request(url).pipe(fs.createWriteStream(dest))
}