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

如何在React前端将接口返回内容生成并下载文件?

从接口返回内容中下载文件的通用方案

情况1:接口返回Blob或文件流

  • 发起请求时指定响应类型为blob:
    • 使用fetch:
      fetch('/api/download-file', {
        method: 'GET',
      })
      .then(response => response.blob())
      .then(blob => {
        // 执行后续下载逻辑
      });
      
    • 使用axios:
      axios.get('/api/download-file', {
        responseType: 'blob'
      })
      .then(response => {
        const blob = new Blob([response.data]);
        // 执行后续下载逻辑
      });
      
  • 生成临时下载链接并触发下载:
    const url = URL.createObjectURL(blob);
    const link = document.createElement('a');
    link.href = url;
    // 文件名可从接口响应头(如Content-Disposition)提取,或自定义
    link.setAttribute('download', 'filename.ext');
    document.body.appendChild(link);
    link.click();
    // 清理资源
    document.body.removeChild(link);
    URL.revokeObjectURL(url);
    

情况2:接口返回Base64编码内容

  • 将Base64字符串转为Blob后执行下载:
    // 假设base64Str为接口返回的编码内容,mime类型为text/csv
    const blob = new Blob([atob(base64Str)], { type: 'text/csv;charset=utf-8;' });
    // 后续步骤同情况1的下载逻辑
    
    或直接使用data URL触发下载:
    const link = document.createElement('a');
    link.href = `data:text/csv;base64,${base64Str}`;
    link.setAttribute('download', 'filename.csv');
    link.click();
    

React中利用给定JSON内容实现文件下载

给定JSON数据:

{ "title": "Dummy File", "name": "temp_file.csv", "content": "name,role\r\n" }

实现代码(函数组件示例)

import React from 'react';

const CSVFileDownloader = () => {
  const fileData = { 
    "title": "Dummy File", 
    "name": "temp_file.csv", 
    "content": "name,role\r\n" 
  };

  const handleDownload = () => {
    const { name, content } = fileData;
    // 根据CSV类型创建Blob
    const blob = new Blob([content], { type: 'text/csv;charset=utf-8;' });
    const downloadUrl = URL.createObjectURL(blob);
    
    const linkElement = document.createElement('a');
    linkElement.href = downloadUrl;
    linkElement.download = name;
    document.body.appendChild(linkElement);
    linkElement.click();
    
    // 清理DOM元素和临时URL
    document.body.removeChild(linkElement);
    URL.revokeObjectURL(downloadUrl);
  };

  return (
    <button onClick={handleDownload}>
      下载示例CSV文件
    </button>
  );
};

export default CSVFileDownloader;

扩展说明

  • 若需下载其他类型文件(如JSON),修改Blob的type参数即可,例如application/json
  • 若内容包含中文等特殊字符,确保charset=utf-8已正确设置,避免出现乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:25:54