【前端】二进制文件流下载(get、post)再谈一次

在这里插入图片描述

最近二进制文件流下载可谓是又出幺蛾子,翻阅以前的文章也找不到解决方案,感觉还是没用完全理解,这次再整理一遍。

先说一个通用场景,就是无论get还是post在接口请求的时候设定好

headers: { 'Content-Type': 'application/json;charset=UTF-8' },
responseType: "blob" 

比如你有一个axios实例名为service,那么他的post和get分别为:

// 下载模板
export const exportExcle = (params) => service.post('detail/export', params, {headers: { 'Content-Type': 'application/json;charset=UTF-8' },responseType: "blob"
});// 下载模板
export const getTemplateDownload = (params) => service.get('template/download', { params,headers: { 'Content-Type': 'application/json;charset=UTF-8' },responseType: "blob" 
});

通过上述接口请求,可以直接获取文件流,如下:
在这里插入图片描述
这时候可以用console 打印一下,确认当前的文件流信息是 response,还是 response.data。
将确认好的文件流,转为blob地址(以excel为例)

const blob = new Blob([response], {type: 'application/vnd.ms-excel',});const blob = new Blob([response.data], {type: 'application/vnd.ms-excel',});

最后通过模拟一个a标签,进行下载

const blobUrl = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.style.display = 'none';
link.href = blobUrl;
link.download = `${fileName}.xlsx`;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

完整方案:

export const exportExcle = (params) => service.post('detail/export', params, {headers: { 'Content-Type': 'application/json;charset=UTF-8' },responseType: "blob"
});export const downloadFile = (response, fileName = 'exported_file') => {const blob = new Blob([response], {type: 'application/vnd.ms-excel',});const blobUrl = window.URL.createObjectURL(blob);const link = document.createElement('a');link.style.display = 'none';link.href = blobUrl;link.download = `${fileName}.xlsx`;document.body.appendChild(link);link.click();document.body.removeChild(link);
}exportExcle.then(res => {downloadFile(res, 'template')
})

如果有其他形式文件,blob的格式如下:

const blob = new Blob(['后台返回的二进制文件'],{type : '该文件是什么类型的文件(MIME)'});后缀名       MIME名称
*.3gpp    audio/3gpp, video/3gpp
*.ac3    audio/ac3
*.asf       allpication/vnd.ms-asf
*.au           audio/basic
*.css           text/css
*.csv           text/csv
*.doc    application/msword    
*.dot    application/msword    
*.dtd    application/xml-dtd    
*.dwg    image/vnd.dwg    
*.dxf      image/vnd.dxf
*.gif            image/gif    
*.htm    text/html    
*.html    text/html    
*.jp2            image/jp2    
*.jpe       image/jpeg
*.jpeg    image/jpeg
*.jpg          image/jpeg    
*.js       text/javascript, application/javascript    
*.json    application/json    
*.mp2    audio/mpeg, video/mpeg    
*.mp3    audio/mpeg    
*.mp4    audio/mp4, video/mp4    
*.mpeg    video/mpeg    
*.mpg    video/mpeg    
*.mpp    application/vnd.ms-project    
*.ogg    application/ogg, audio/ogg    
*.pdf    application/pdf    
*.png    image/png    
*.pot    application/vnd.ms-powerpoint    
*.pps    application/vnd.ms-powerpoint    
*.ppt    application/vnd.ms-powerpoint    
*.rtf            application/rtf, text/rtf    
*.svf           image/vnd.svf    
*.tif         image/tiff    
*.tiff       image/tiff    
*.txt           text/plain    
*.wdb    application/vnd.ms-works    
*.wps    application/vnd.ms-works    
*.xhtml    application/xhtml+xml    
*.xlc      application/vnd.ms-excel    
*.xlm    application/vnd.ms-excel    
*.xls           application/vnd.ms-excel    
*.xlt      application/vnd.ms-excel    
*.xlw      application/vnd.ms-excel    
*.xml    text/xml, application/xml    
*.zip            aplication/zip    *.xlsx     application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

至此完结撒花。以后下载类需求再也不会堵我时间了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84705.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uv功能介绍和完整使用示例总结

以下是关于 UV 工具的完整使用示例总结,结合其核心功能与典型场景,帮助用户快速上手并高效管理 Python 项目: 一、安装与配置 快速安装 macOS/Linux:curl -LsSf https://astral.sh/uv/install.sh | shWindows:powershell -ExecutionPolicy ByPass -c "irm https://as…

MySQL启动报错“mysqld_safe Directory ‘/var/lib/mysql‘ don‘t exists“终极解决方案!从入门到高阶全攻略

在MySQL的使用过程中,启动报错mysqld_safe Directory /var/lib/mysql dont exists是开发者经常遇到的问题。这个错误看似简单,实则可能涉及目录权限、系统配置、文件系统等多个方面。本文将结合官方文档与实际经验,从基础到高级,为…

python 常见数学公式函数使用详解

Python 数学公式与函数大全 Python 提供了丰富的数学计算支持,包括内置函数、标准库(math、cmath、numpy)和第三方库(sympy、scipy)。以下是常用数学公式和函数的分类整理: 1. 基本数学运算 1.1 算术运算…

阿里云服务器+宝塔面板发布网站

一、租用服务器 (1)、进入官网 阿里云-计算,为了无法计算的价值阿里云——阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司之一。提供免费试用、云服务器、云数据库、云安全、云企业应用等云计算服务,以…

langchain框架中各种Agent(LLMSingleAgent ReactAgent Plan-and-Execute Agent)原理方式对比

在LangChain框架中,LLMSingleActionAgent与ReAct Agent及其他Agent类型在内部原理上存在显著差异,主要体现在推理机制、行动策略、动态性等方面。以下结合实例进行详细说明: 1. LLMSingleActionAgent的内部原理 LLMSingleActionAgent是LangC…

AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月22日第116弹

从今天开始,咱们还是暂时基于旧的模型进行预测,好了,废话不多说,按照老办法,重点8-9码定位,配合三胆下1或下2,杀1-2个和尾,再杀4-5个和值,可以做到100-300注左右。 (1)定…

电池模块仿真 - 线性时不变降阶模型

电池模块热设计挑战 针对使用周期设计电池模块存在几个独特的热工程挑战。 使用循环(例如驾驶循环)涉及可变的负载、速度和环境条件,要求电池在动态压力下提供一致的性能。管理热行为至关重要,因为波动的电流会产生热量&#xf…

408第二季 - 组成原理 - IO方式II

继续中断 中断优先级包括响应优先级和处理优先级 注意下面的,很多都是之前说的 这里的中断向量的地址,就是下面的很粗的箭头 一个很复杂的图 然后记一下很复杂的东西 关中断,保存断点和中断服务程序寻址都是之前讲过的 继续推进!…

Spring AOP:横切关注点的优雅解决方案

目录 概要 和面向对象编程的区别 优点 AOP的底层原理 JDK动态代理技术 AOP七大术语 切点表达式 AOP实现方式 Spring对AOP的实现包括以下3种方式: 在本篇文章中,我们主要讲解前两种方式。 基于AspectJ的AOP注解式开发 定义目标类以及目标方法…

开源 Arkts 鸿蒙应用 开发(三)Arkts语言的介绍

文章的目的为了记录使用Arkts 进行Harmony app 开发学习的经历。本职为嵌入式软件开发,公司安排开发app,临时学习,完成app的开发。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。 相关链接: 开源 Arkts …

hot100 -- 16.多维动态规划

1.不同路径 问题: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条…

优先级继承和优先级天花板(pthread_mutexattr_setprotocol)

优先级继承和优先级天花板,均可以解决优先级翻转问题。 优先级翻转: 实例观察优先级翻转和优先级继承现象-CSDN博客 如果有两个线程A和B,A的优先级大于B的优先级。在B获取锁之后,释放锁之前,A想要获取锁&#xff0c…

Spark on Hive表结构变更

Spark on Hive表结构变更 1、表结构变更概述1、表结构变更概述 在Spark on Hive架构中,表结构(Schema)变更是一个常见且重要的操作。理解其背景、使用场景以及具体方式对于大数据平台管理至关重要 1.1、Spark on Hive元数据管理 Hive Metastore(HMS): 核心组件。它是一个…

NotePad++ 怎么没有找到插件管理?

今天想使用NotePad阅读markdown文档,却发现未安装插件,本想通过插件管理安装一下,结果没有插件管理!!!! 我发现帮助菜单里面有一个入口 可惜的是网页无法打开。。。 只能自己下载插件了。 将插件…

内容搜索软件AnyTXT.Searcher忘记文件名也能搜,全文检索 1 秒定位文件

各位文件搜索小能手们!你们有没有过这种糟心事儿,想找个文件,死活想不起文件名,在电脑里一顿乱翻,眼睛都找瞎了也没找到。今天我就给你们介绍一款神器——AnyTXT.Searcher,它可是免费的全文检索工具&#x…

uniapp实现像qq消息列表左滑显示右侧操作栏效果

先看效果图 代码 SlidableChatEntry.vue <template><!-- 聊天项列表 --><view class"chat-item"touchstart"handleTouchStart($event)"touchmove"handleTouchMove($event)"touchend"handleTouchEnd()"><!-- 聊…

收集了一些用python做mysql增删改查的资料

还是因为最近在开发fastapi应用、现在需要把一些关键信息存库&#xff0c;所以就很想要一些这方面的资料。我这里找到一些&#xff0c;希望你看了帖子能节省一些时间。 前边说过如何搭建fastapi开发环境&#xff0c;帖子链接为&#xff1a; https://blog.csdn.net/weixin_4298…

嵌入式软件面经(一)Q: 什么是Modbus协议?它有哪些特点?

Modbus协议是一种开放式的工业通讯协议&#xff0c;最初由Modicon公司&#xff08;现施耐德电气Schneider Electric&#xff09;于1979年开发&#xff0c;广泛应用于工业现场设备之间的数据通讯&#xff0c;尤其适用于PLC&#xff08;可编程逻辑控制器&#xff09;与现场仪表、…

Java-52 深入浅出 Tomcat SSL工作原理 性能优化 参数配置 JVM优化

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月13日更新到&#xff1a; AI炼丹日志-29 - 字节…

day44-硬件学习之arm启动代码

一、跳转指令实现函数调用 LR&#xff08;链接寄存器&#xff09;&#xff1a;保留函数返回地址 1.1 bl指令 跳转指令bl,使LR保存当前函数进入前的下一条指令的地址&#xff0c;使函数调用后可以返回下一条指令的地址&#xff1b; 1.2 bx指令 跳到目标地址&#xff1b; 1.3 栈…