You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中解码Base64字符串并批量按序下载图片的实现

批量下载Base64图片的简洁实现

问题分析

你原来的代码存在几个核心问题:

  1. 错误将API返回的Base64数组按Blob处理,实际API返回的是包含Base64字符串的JSON数组
  2. 仅处理单文件下载,未实现批量按序下载
  3. 未处理Base64字符串中的冗余格式(如示例中的b'...'前缀)

正确实现代码

import React from "react";
import axios from "axios";

export default function App() {
  // 替换为你的实际API地址
  const baseUrl = "your-api-base-url";

  // 清理Base64字符串,移除不必要的前缀和包裹
  const cleanBase64 = (base64Str) => {
    return base64Str.replace(/^data:image\/\w+;base64,/, "")
                    .replace(/^b'|'$/g, "");
  };

  // 将Base64转换为Blob
  const base64ToBlob = (base64Str, mimeType = "image/jpeg") => {
    const byteCharacters = atob(cleanBase64(base64Str));
    const byteArrays = [];
    for (let i = 0; i < byteCharacters.length; i++) {
      byteArrays.push(byteCharacters.charCodeAt(i));
    }
    return new Blob([new Uint8Array(byteArrays)], { type: mimeType });
  };

  const handleDownload = async () => {
    try {
      // 请求获取Base64图片数组
      const response = await axios.get(`${baseUrl}/bulk/images/download`);
      const imageBase64List = response.data;

      // 遍历数组批量下载,按序命名
      imageBase64List.forEach((base64, index) => {
        // 创建Blob对象
        const blob = base64ToBlob(base64);
        const url = window.URL.createObjectURL(blob);
        
        // 创建下载链接
        const link = document.createElement("a");
        link.href = url;
        // 按序命名,如image-1.jpg、image-2.jpg
        link.download = `image-${index + 1}.jpg`;
        link.style.display = "none";
        
        document.body.appendChild(link);
        link.click();
        
        // 清理资源
        document.body.removeChild(link);
        window.URL.revokeObjectURL(url);
      });
    } catch (error) {
      console.error("下载失败:", error);
    }
  };

  return (
    <div className="App">
      <h1>批量下载图片</h1>
      <button type="button" onClick={handleDownload}>
        开始下载
      </button>
    </div>
  );
}

关键说明

  • Base64清理:处理API返回的Base64字符串中可能存在的data:image/xxx;base64,前缀或b'...'包裹格式
  • 批量处理:遍历数组,为每个图片生成独立的下载链接,按序号命名确保顺序
  • 资源清理:下载完成后移除DOM元素并释放ObjectURL,避免内存泄漏
  • 错误处理:使用try/catch捕获请求和下载过程中的异常

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 23:05:22