当前位置:首页 > React

react如何下载文件

2026-03-31 16:37:18React

使用 fetchBlob 下载文件

通过 fetch 获取文件数据,转换为 Blob 对象,生成下载链接并触发点击:

const downloadFile = async (url, filename) => {
  const response = await fetch(url);
  const blob = await response.blob();
  const downloadUrl = window.URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = downloadUrl;
  link.download = filename;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  window.URL.revokeObjectURL(downloadUrl);
};

调用示例:downloadFile('https://example.com/file.pdf', 'document.pdf')

使用 axios 下载文件

适用于需要添加请求头或处理大文件分片的情况:

import axios from 'axios';

const downloadWithAxios = async (url, filename) => {
  const response = await axios.get(url, { responseType: 'blob' });
  const blob = new Blob([response.data]);
  const downloadUrl = window.URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = downloadUrl;
  link.download = filename;
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  window.URL.revokeObjectURL(downloadUrl);
};

调用时需确保 axios 已安装。

直接通过 <a> 标签下载

适用于公开可访问的静态文件,无需处理权限或动态内容:

<a href="https://example.com/file.pdf" download="document.pdf">
  下载文件
</a>

注意:跨域文件可能受浏览器安全策略限制。

处理后端返回的文件流

当后端返回文件流时,通过设置 Content-Disposition 头部自动下载:

const handleStreamResponse = async (apiEndpoint) => {
  const response = await fetch(apiEndpoint);
  const contentDisposition = response.headers.get('Content-Disposition');
  const filename = contentDisposition.split('filename=')[1];
  const blob = await response.blob();
  const url = window.URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = filename;
  link.click();
};

需确保后端正确设置响应头。

react如何下载文件

注意事项

  • 跨域问题:确保服务器配置 CORS 允许文件下载。
  • 大文件处理:使用分片下载或进度提示优化用户体验。
  • 权限控制:私有文件需在请求中添加认证头(如 Authorization)。

分享给朋友:

相关文章

如何编译java文件

如何编译java文件

安装JDK 确保系统已安装Java Development Kit(JDK)。可通过命令行输入 javac -version 和 java -version 验证。若未安装,需从Oracle或Open…

uniapp 服务文件

uniapp 服务文件

uniapp 服务文件的概念 在 uniapp 中,服务文件通常指用于封装业务逻辑、接口请求或通用功能的 JavaScript 文件。这类文件通常存放在项目的 common 或 utils 目录下,便…

vue 实现文件目录

vue 实现文件目录

Vue 实现文件目录结构 Vue 项目通常采用模块化设计,合理的目录结构有助于代码维护和团队协作。以下是常见的 Vue 项目目录结构及说明: 基础目录结构(基于 Vue CLI 生成) proje…

vue实现文件导入

vue实现文件导入

文件导入的基本实现 在Vue中实现文件导入通常通过HTML的<input type="file">元素结合File API完成。创建一个文件选择组件,监听change事件获取用户选择的文件…

vue实现文件预览功能

vue实现文件预览功能

实现文件预览功能的方法 在Vue中实现文件预览功能可以通过多种方式完成,具体取决于文件类型和需求。以下是几种常见的实现方法: 图片预览 对于图片文件,可以使用HTML5的FileReader API…

vue实现文件下载a

vue实现文件下载a

Vue 实现文件下载的方法 使用 <a> 标签下载 通过动态创建 <a> 标签实现文件下载。适用于已知文件 URL 的情况: downloadFile(url, fi…