当前位置: 首页 > news >正文

后端返回文件流,前端怎么导出、下载(8种方法可实现)

在前端导出和下载后端返回的文件流时,可以使用以下几种方法:

  1. 使用window.open()方法:

    • 在前端使用window.open()方法打开一个新的窗口或标签页,并将后端返回的文件流作为URL传递给该方法。浏览器会自动下载该文件。
    • 例如:window.open('http://example.com/download', '_blank');
  2. 使用<a>标签的download属性:

    • 创建一个隐藏的<a>标签,设置href属性为后端返回的文件流的URL,同时设置download属性为文件的名称。然后使用JavaScript模拟点击该标签,触发文件下载。
    • 例如:
    const link = document.createElement('a');
    link.href = 'http://example.com/download';
    link.download = 'filename.ext';
    link.click();
    
  3. 使用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响应头,以指定文件的名称和下载方式。

除了上述提到的方法,还有以下五种方法可以实现前端导出和下载后端返回的文件流:

  1. 使用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);
    
  2. 使用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');});
    
  3. 使用iframe:

    • 创建一个隐藏的iframe,将其src属性设置为后端返回的文件流的URL。浏览器会自动下载该文件。
    • 例如:
    const iframe = document.createElement('iframe');
    iframe.style.display = 'none';
    iframe.src = 'http://example.com/download';
    document.body.appendChild(iframe);
    
  4. 使用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);
    
  5. 使用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();});
    

这些方法提供了多种选择来实现前端导出和下载后端返回的文件流。根据具体的需求和项目环境,选择适合的方法进行实现。

http://www.lryc.cn/news/145178.html

相关文章:

  • 什么是 ThreadLocal?
  • CANOCO5.0实现冗余分析(RDA)最详细步骤
  • 【tkinter 专栏】掷骰子游戏
  • 19 NAT穿透|python高级
  • 2023常见前端面试题
  • 登录校验-JWT令牌-生成和校验
  • GIT 常用指令
  • 多目标优化
  • odoo的优势
  • Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【三】
  • Kali 软件管理
  • 加油站【贪心算法】
  • java八股文面试[多线程]——死锁、活锁、饥饿
  • 设计模式——装饰器模式
  • ①matlab的命令掌握
  • MySQL----索引
  • 秒杀系统的业务流程以及优化方案(实现异步秒杀)
  • Java实现根据商品ID获取1688商品详情跨境属性数据,1688商品重量数据接口,1688API接口封装方法
  • 前端面试的性能优化部分(14)每天10个小知识点
  • Uniapp笔记(六)uniapp基础
  • C++ sort函数用法
  • 电子仓库预测水浸事件,他怎么做到的?
  • CMake调用第三方库的两种方法
  • Django基础7——用户认证系统、Session管理、CSRF安全防护机制
  • 基于流计算 Oceanus(Flink) CDC 做好数据集成场景
  • MySQL8.Xx安装控制台未生成随机密码解决方案
  • 安装VS2005时提示:请插入磁盘:visual studio 2005 DVD
  • OpenVINO2023使用简介
  • 基于React实现无限滚动的日历详细教程,附源码【手写日历教程第二篇】
  • 68、使用aws官方的demo和配置aws服务,进行视频流上传播放