下载将文件流转换为 base" /> 下载将文件流转换为 base"/>

前端如何导出和下载后端返回的文件流?

发表时间: 2023-11-05 11:56

如果后端返回了文件流,前端可以通过以下方式实现文件的导出和下载:

  1. 使用 <a> 标签进行下载:
<a href="data:application/octet-stream;base64,文件流的base64编码" download="文件名">下载</a>

将文件流转换为 base64 编码的字符串,并将其作为 href 属性值,设置 download 属性为文件名,这样点击链接时会触发下载操作。

  1. 使用 JavaScript 实现下载:
function downloadFile(fileData, fileName) {  const blob = new Blob([fileData], { type: 'application/octet-stream' });  const url = URL.createObjectURL(blob);  const link = document.createElement('a');  link.href = url;  link.download = fileName;  link.click();  URL.revokeObjectURL(url);}// 在接收到文件流的回调函数中调用 downloadFile 函数downloadFile(response.data, response.headers['content-disposition']);

这里通过创建 Blob 对象,并将文件流作为其数据源,然后使用 URL.createObjectURL 方法生成一个临时的 URL,将该 URL 赋值给 <a> 标签的 href 属性,设置 download 属性为文件名,最后触发点击模拟下载操作。

根据具体的前端开发框架和需求,也可以使用其他的下载方法,但以上两种方法是一种常见且简单易用的方式。

当使用后端返回的文件流进行前端导出和下载时,还可以考虑以下方案:

  1. Fetch API 下载:
fetch(url)  .then(response => response.blob())  .then(blob => {    const url = URL.createObjectURL(blob);    const link = document.createElement('a');    link.href = url;    link.download = fileName;    link.click();    URL.revokeObjectURL(url);  });

通过 Fetch API 发起对文件流的请求,并将其转化为 Blob 对象。然后使用 URL.createObjectURL 方法生成临时的 URL,将其赋值给 <a> 标签的 href 属性,设置 download 属性为文件名,最后触发点击模拟下载操作。

  1. 使用 FileSaver.js:

FileSaver.js 是一个开源的 JavaScript 库,可以方便地实现文件的保存和下载。你可以在前端项目中引入文件,并使用它提供的 saveAs 方法进行下载操作。

import { saveAs } from 'file-saver';fetch(url)  .then(response => response.blob())  .then(blob => {    saveAs(blob, fileName);  });

以上代码中,首先通过 Fetch API 获取文件流并转换为 Blob 对象,然后使用 FileSaver.js 提供的 saveAs 方法进行下载操作。

这些方法可以帮助你在前端利用后端返回的文件流实现导出和下载功能。选择适合你项目需求和开发环境的方式进行实现即可。