node实现图片批量上传下载

441 阅读1分钟

图片批量下载

# script.js 匹配md中所有图片,并返回所有图片
function matchImgs (content) {
  // 正则匹配图片
  const images = [];
  const reg = /(aaa)\/[a-z0-9]{24}\/[a-z0-9]{24}\/[a-z0-9]{32}.[a-zA-Z]{3}/g;
  content.replace(reg, function (m) {
    const imgUrl = m.replace(/(aaa)/g, 'imgurl'); // 去掉前缀aaa
    images.push(`http://域名/${imgUrl}`)
  })
  return images;
}

const imgs = matchImgs();
exports.imgs = imgs;

# bagpipe.js 批量下载图片
const fs = require("fs");
const path = require('path');
const request = require('request');
const imageList = require("./script").imgs;
const Bagpipe = require('bagpipe');
const bagpipe = new Bagpipe(10);

const downloadImage = function(src, dest, callback) {
  request.head(src, function () {
    if(!src) return;
    request(src).pipe(fs.createWriteStream(dest)).on('close', function() {
      callback(null, dest);
    });
  });
};

for (let i = 0; i < imageList.length; i++) {
    if (imageList[i].indexOf("http://域名") === 0) {
       // 下载图片到本地images目录
        const destImage = path.resolve("./images/", imageList[i].split("/")[imageList[i].split("/").length -1]);
        bagpipe.push(downloadImage, imageList[i], destImage, function(err, data) {
          console.log(data);
     });
    }
}

图片批量上传

const fs = require("fs");
const path = require('path');
import * as child from 'child_process';

function upload () {
  const templateUrl = path.join(process.cwd(), '/images');
  const dirInfo = fs.readdirSync(templateUrl);
  for (let i = 0; i < dirInfo.length; i++) { // 遍历文件目录
    const item = dirInfo[i];
    const location = path.join(templateUrl, item);
    const index = location.lastIndexOf('/');
    const fileName = location.substring(index + 1); // 文件名
    const imgPath = `${templateUrl}/${fileName}`;
    // TODO 上传到图床,获取图片url
  }
}

upload()

node遍历文件目录

const url = process.cwd();
const dirInfo = fs.readdirSync(url);
for (let i = 0; i < dirInfo.length; i++) {
  console.log(dirInfo[i])
  // TODO 获取文件名、路径等信息
}