后端返回文件流,前端怎么导出、下载(8种方法可实现)
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
在前端导出和下载后端返回的文件流时,可以使用以下几种方法: 使用window.open()方法: 在前端使用window.open()方法打开一个新的窗口或标签页,并将后端返回的文件流作为URL传递给该方法。浏览器会自动下载该文件。 例如:window.open('http://example.com/download', '_blank'); 使用<a>标签的download属性: 创建一个隐藏的<a>标签,设置href属性为后端返回的文件流的URL,同时设置download属性为文件的名称。然后使用Javascript模拟点击该标签,触发文件下载。 例如: const link = document.createElement('a'); link.href = 'http://example.com/download'; link.download = 'filename.ext'; link.click(); 使用Fetch API或XHR请求: 使用Fetch API或XHR(XMLHttpRequest)发送请求,获取后端返回的文件流,并使用Blob对象创建一个URL。然后将该URL传递给<a>标签的href属性,并使用Javascript模拟点击该标签,触发文件下载。 例如: fetch('http://example.com/download') .then(response => response.blob()) .then(blob => { const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = 'filename.ext'; link.click(); }); 这些方法可以根据具体的需求和项目环境选择使用。需要注意的是,后端返回的文件流需要正确设置Content-Disposition响应头,以指定文件的名称和下载方式。 除了上述提到的方法,还有以下五种方法可以实现前端导出和下载后端返回的文件流: 使用HTML5的download属性: 创建一个<a>标签,设置href属性为后端返回的文件流的URL,同时设置download属性为文件的名称。将该标签插入到DOM中,并使用Javascript模拟点击该标签,触发文件下载。 例如: const link = document.createElement('a'); link.href = 'http://example.com/download'; link.download = 'filename.ext'; document.body.appendChild(link); link.click(); document.body.removeChild(link); 使用FileSaver.js库: 引入FileSaver.js库,使用saveAs()方法将后端返回的文件流保存为本地文件。需要将后端返回的文件流转换为Blob对象。 例如: import { saveAs } from 'file-saver'; fetch('http://example.com/download') .then(response => response.blob()) .then(blob => { saveAs(blob, 'filename.ext'); }); 使用iframe: 创建一个隐藏的iframe,将其src属性设置为后端返回的文件流的URL。浏览器会自动下载该文件。 例如: const iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.src = 'http://example.com/download'; document.body.appendChild(iframe); 使用FormData和XMLHttpRequest: 创建一个FormData对象,将后端返回的文件流作为Blob对象添加到FormData中。然后使用XMLHttpRequest发送请求,将FormData作为请求体发送到后端进行下载。 例如: const formData = new FormData(); formData.append('file', blob, 'filename.ext'); const xhr = new XMLHttpRequest(); xhr.open('POST', 'http://example.com/download'); xhr.send(formData); 使用axios库: 使用axios库发送请求,获取后端返回的文件流,并将其保存为本地文件。需要将后端返回的文件流转换为Blob对象。 例如: import axios from 'axios'; axios.get('http://example.com/download', { responseType: 'blob' }) .then(response => { const blob = new Blob([response.data]); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = 'filename.ext'; link.click(); }); 这些方法提供了多种选择来实现前端导出和下载后端返回的文件流。根据具体的需求和项目环境,选择适合的方法进行实现。 ———————————————— 版权声明:本文为CSDN博主「一花一world」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/ACCPluzhiqi/article/details/132514874 该文章在 2023/10/28 16:48:37 编辑过 |
关键字查询
相关文章
正在查询... |