vue 后端返回二进制流-前端通过blob对象下载文件-图片

前言

  • 在实际开发中我们经常会遇见下载文件的场景,比如下载合同,下载文件

  • 下载文件有2种方式,一种是后端返回二进制流,前端通过blob对象接受根据不同类型下载

  • 还有一种把地址直接在浏览器新窗口打开浏览器打开pdf可以预览和下载,其他文件直接下载

  • 但不管是那种方式,原理都是一样的只是取决于谁来执行转化代码

代码实现

1.封装api-根据直接后端接口而定(注意要在请求时标明是二进制文件流)

// 文件-图片下载
export function downloadfile (data) {return request({url: '/download/file',method: 'post',data,// 指定请求类型为二进制流// 不写可能会造成下载成功的图片和文件是看不到和没有内容的responseType: 'blob'})
}

2.下载不同文件和图片在项目中可能经常使用-可以封装成一个方法。

2.1在utils下创建download.js文件

export default {// 下载 Excel 方法excel (data, fileName) {this.download(data, fileName, 'application/vnd.ms-excel')},// 下载 Word 方法word (data, fileName) {this.download(data, fileName, 'application/msword')},// 下载 Zip 方法zip (data, fileName) {this.download(data, fileName, 'application/zip')},// 下载 Html 方法html (data, fileName) {this.download(data, fileName, 'text/html')},// 下载 Markdown 方法markdown (data, fileName) {this.download(data, fileName, 'text/markdown')},// 下载 pdf 方法pdf (data, fileName) {console.log('data', data)console.log('fileName', fileName)this.download(data, fileName, 'application/pdf')},// 下载 图片方法png (data, fileName) {this.download(data, fileName, 'application/png')},// 兼容写法stream (data, fileName) {this.download(data, fileName, 'application/octet-stream')},download (data, fileName, mineType) {// 创建 blob对象let blob = new Blob([data], { type: mineType })// 浏览器api 有的不支持-二种都写window.URL = window.URL || window.webkitURL// 获取链接地址-(内容赋值到临时链接)let href = URL.createObjectURL(blob)// 创建a标签let downA = document.createElement('a')// 把链接赋值给a标签downA.href = href// 赋值文件名称downA.download = fileName// 点击下载downA.click()// 销毁超连接window.URL.revokeObjectURL(href)}}

3.在页面中使用

// html
<el-button type="info" @click="addclose">下载</el-button>
​
// data
datafile: {url: '文件或者图片地址'}// 引入方法
import download from '@/utils/download'
// 方法
// 下载async addclose () {const res = await downloadfile(this.datafile)
​// 下载图片// 针对性的类型-名称带不带.png都不会受影响// download.png (res,'测试图片')// 带后缀// download.png (res,'测试图片.png')
​// 下载pdf文件// 针对性的类型-名称带不带.pdf都不会受影响// download.pdf (res,'pdf文件')// 带后缀download.pdf (res,'pdf文件.pdf')
​// 公共方法// application/octet-stream 相当于公共类型-需要在名称带上指定的后缀-不然下载下来的文件没有后缀名打不开// download.stream (res,'公共方法.png')// download.stream (res,'公共方法.pdf')}

注意

  • 首先排查下载下来的文件格式是否正确,不正确检查blob对象类型(名称也有关系是否带后缀名)

  • 如果发现下载下来的文件格式后缀正确,内容,图片为空,看不见,排查后端是否把内容转成流,前端在封装api时是否设置responseType: 'blob'​


总结:

经过这一趟流程下来相信你也对 vue 后端返回二进制流-前端通过blob对象下载文件-图片 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

什么不足的地方请大家指出谢谢 -- 風过无痕

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

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

相关文章

react实现一维表格、键值对数据表格key value表格

UI画的需求很抽象&#xff0c;直接把数据铺开&#xff0c;不能直接用antd组件了 上一行是name&#xff0c;下一行是value&#xff0c;总数不定&#xff0c;最后前端还要显示求和 class OneDimensionTable extends React.Component { render() {const { data } this.props;le…

Linux安装node_exporter使用grafana进行服务器监控

文章目录 linux安装node_exporter修改node_exporter端口服务器安装grafana服务器安装prometheus将linux的noe_exporter配置到prometheus配置文件中导入linux服务器的模板,id: 16098常用exporter安装下载 linux安装node_exporter 要在CentOS 7.6.1810 (Core)上安装node_exporte…

网安顶刊IEEE Transactions on Dependable and Secure Computing

安全顶刊论文列表 写在最前面IEEE Transactions on Dependable and Secure ComputingTable of Contents&#xff08;March-April 2023&#xff09;Volume 20, Issue 2Table of Contents&#xff08;Sept.-Oct. 2023&#xff09;Volume 20, Issue 5 写在最前面 为了给自己找论文…

2023_Spark_实验十九:SparkStreaming入门案例

SparkStreaming入门案例 一、准备工作 二、任务分析 三、官网案例 四、开发NetWordCount 一、准备工作 实验环境&#xff1a;netcat 安装nc&#xff1a;yum install -y nc 二、任务分析 将nc作为服务器端&#xff0c;用户产生数据&#xff1b;启动sparkstreaming案例中的客户端…

【SA8295P 源码分析 (二)】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总

【SA8295P 源码分析】64 - QNX 与 Android GVM 显示 Dump 图片方法汇总 一、QNX侧1.1 surfacedump 功能1.2 screenshot 功能二、Android GVM 侧2.1 screencap -p 导出 PNG 图片2.2 screencap 不加 -p 参数,导出 RGB32 图片2.3 dumpsys SurfaceFlinger --display-id 方法系列文…

php获取农历日期节日

代码地址&#xff1a;php获取农历日期节日-遇见你与你分享 <?php $c new DayService(); $today$c->convertSolarToLunar(date(Y),date(m),date(d)); $time "农历".$today[1].$today[2]."日";class DayService {var $MIN_YEAR 1891;var $MAX_YEAR …

mac电脑zsh: command not found: adb

“zsh: command not found: adb” 的解决方法&#xff1a; 前提 已经成功安装了 Android Studio. 打开 iTerm 终端依次输入下面命令&#xff1a; echo export ANDROID_HOME/Users/$USER/Library/Android/sdk >> ~/.zshrc echo export PATH${PATH}:$ANDROID_HOME/tool…

NIO IN:技术蔚来的首次「大阅兵」

宝山&#xff0c;上海第一钢铁厂旧址。 上周&#xff0c;蔚来在这里点亮金色炉台&#xff0c;2500 立方米高炉&#xff0c;浓重的工业气质与古典凝重的光影交织&#xff0c;蔚来 NIO IN 用科技的进步呼应那个火红的年代。 这是蔚来第一次开科技发布会&#xff0c;为了全方位展…

通过内网穿透快速搭建公网可访问的Spring Boot接口调试环境

&#x1f525;博客主页&#xff1a; 小羊失眠啦 &#x1f516;系列专栏&#xff1a; C语言 、Cpolar、Linux ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 …

通讯协议学习之路:RS485协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序&…

【SA8295P 源码分析 (二)】66 - Android 侧内核层 TouchScreen Panel(TP)触摸屏驱动源码分析

【SA8295P 源码分析】66 - Android 侧内核层 TouchScreen Panel(TP)触摸屏驱动源码分析 一、在 Shell 中查看 input 设备信息命令1.1 获取QNX 端虚拟化过去的 input 设备:cat /mnt/vm/images/linux-la.config1.2 获取 Android 端 input 设备信息:getevent -i1.3 获取 Andro…

ARJ_DenseNet BMR模型训练

废话不多数&#xff0c;模型训练代码 densenet_arj_BMR.py &#xff1a; import timefrom tensorflow.keras.applications.xception import Xception from tensorflow.keras.applications.densenet import DenseNet169 from tensorflow.keras.preprocessing.image import Im…

电脑桌面记事本便签软件哪个好?

很多人的电脑或者手机上都离不开一款好用的便签软件&#xff0c;使用便签软件可以帮助大家记事&#xff0c;提醒大家按时完成各项任务&#xff0c;但是自带的记事本便签软件不论从外观还是功能方面都有一定的欠缺&#xff0c;在使用过程中很容易耽误事情。 功能全面外观好看的…

HTTP 协议的基本格式(部分)

要想了解HTTP&#xff0c;得先知道什么是HTTP&#xff0c;那么HTTP是什么呢&#xff1f;HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。那什么是超文本呢&#xff1f;那就是除了文本&#xff0c;还有图片&#xff0c;声音&#xff0c;视频等。 …

『C++成长记』C++入门——命名空间缺省参数

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、C的认识 &#x1f4d2;1.1什么是C &#x1f4d2;1.2C的发展 二、C关键字 三…

论文阅读之《Kindling the Darkness: A Practical Low-light Image Enhancer》

目录 摘要 介绍 已有方法回顾 普通方法 基于亮度的方法 基于深度学习的方法 基于图像去噪的方法 提出的方法 2.1 Layer Decomposition Net 2.2 Reflectance Restoration Net 2.3 Illumination Adjustment Net 实验结果 总结 Kindling the Darkness: A Practical L…

轮转数组------题解报告

题目&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题解&#xff1a; 如果直接暴力双循环会时间超限&#xff0c;所以我选择了一个空间复杂度比较高的方法。直接再创建一个数组&#xff0c;然后对应位置替换&#xff0c;最后把值赋给原…

Spring framework Day24:定时任务

前言 在我们的日常生活和工作中&#xff0c;时间管理是一项至关重要的技能。随着各种复杂任务的增加和时间压力的不断增加&#xff0c;如何更好地分配和利用时间成为了一项迫切需要解决的问题。在这样的背景下&#xff0c;定时任务成为了一种非常有效的解决方案。 定时任务&a…

Kubernetes技术与架构-服务

从软件系统架构设计分层的角度看&#xff0c;Kubernetes的Service是基于Pod的上层&#xff0c;业务应用部署在Pod中&#xff0c;使用Service绑定Pod部署的应用&#xff0c;Service可以对外或者对上层提供服务&#xff0c;当Pod集群在系统调度的过程中发生弹性伸缩的时候&#x…

Python中的With ...as... 作用

Python中的with … as …作用&#xff1a; 1、通过with语句可以得到一个上下文管理器 2、执行对象 3、加载__enter__方法 4、加载__exit__方法 5、执行__enter__方法 6、as 可以得到enter的返回值 7、拿到对象执行相关操作 8、执行完了之后调用__exit__方法 9、如果遇到异常&a…