nodejs批量下载图片

栏目: NodeJs 发布时间:2024-12-05

node.js 中实现图片批量下载,你可以使用各种库来处理 HTTP 请求、文件操作和并发控制。以下是一个简单的示例,演示如何批量下载图片并保存到本地文件系统。

首先,你需要安装 axiosfs-extra 库。axios 用于发送 HTTP 请求,fs-extrafs 模块的一个扩展,提供了更多方便的文件操作方法。

你可以使用 npm 或 yarn 来安装这些库:

npm install axios fs-extra

yarn add axios fs-extra

以下是一个示例代码,演示如何批量下载图片:

const axios = require('axios');
const fs = require('fs-extra');
const path = require('path');

const imageUrls = [
  'https://example.com/image1.jpg',
  'https://example.com/image2.jpg',
  // 添加更多的图片 URL
];

const downloadDir = path.join(__dirname, 'downloaded_images');

// 确保下载目录存在
fs.ensureDirSync(downloadDir);

async function downloadImage(url, filename) {
  try {
    const response = await axios({
      url,
      responseType: 'stream',
    });

    response.data.pipe(fs.createWriteStream(path.join(downloadDir, filename)));

    return new Promise((resolve, reject) => {
      response.data.on('end', () => resolve());
      response.data.on('error', (err) => reject(err));
    });
  } catch (error) {
    console.error(`Failed to download ${url}:`, error);
    throw error;
  }
}

async function downloadImages(urls) {
  const promises = urls.map((url, index) => {
    const filename = `image_${index + 1}.jpg`; // 你可以根据需要调整文件名
    return downloadImage(url, filename);
  });

  try {
    await Promise.all(promises);
    console.log('All images downloaded successfully.');
  } catch (error) {
    console.error('Error downloading images:', error);
  }
}

downloadImages(imageUrls);

代码解释:

1、引入依赖

引入 axiosfs-extrapath 模块。

2、定义图片 URL 数组

将你要下载的图片 URL 放在一个数组中。

3、定义下载目录

指定一个目录来保存下载的图片。

4、确保目录存在

使用 fs.ensureDirSync 方法确保下载目录存在。

5、定义 downloadImage 函数

该函数接收图片 URL 和文件名,然后使用 axios 发送 HTTP 请求下载图片,并将图片保存到指定文件路径。

6、定义 downloadImages 函数

该函数接收一个包含 URL 的数组,为每个 URL 调用 downloadImage 函数,并使用 Promise.all 并发处理所有下载任务。

7、启动下载

调用 downloadImages 函数并传入图片 URL 数组。

这个示例代码是一个简单的批量下载图片的实现。你可以根据实际需求对其进行扩展,比如添加错误重试机制、支持更多文件格式、调整下载并发数量等。

本文地址:https://www.tides.cn/p_node-batch-download-images