位置: IT常识 - 正文

vue 中从后端获取到文件的 url 地址,前端根据 url 地址下载文件(vue怎么拿到后端数据)

编辑:rootadmin
vue 中从后端获取到文件的 url 地址,前端根据 url 地址下载文件 vue 之从后端获取到文件的 url 地址,前端根据 url 地址文件下载前言一、实现思路二、具体实现1.完整代码2.代码分析2.1 通过 fetch 将 url 地址转换为 blob 对象2.2 通过 URL.createObjectUrl() 将 blob 对象生成 url 地址2.3 创建 `<a>` 标签元素,将该元素放到页面当中,并通过点击事件来实现下载功能总结前言

推荐整理分享vue 中从后端获取到文件的 url 地址,前端根据 url 地址下载文件(vue怎么拿到后端数据),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue怎么获取后端数据,vue的后端,vue的后端,vue的后端,vue的后端,vue从后端获取数据,vue从后端获取数据,vue获取后端写入的cookie,内容如对您有帮助,希望把文章链接给更多的朋友!

项目用的是 vben admin 框架,用的是 vue3 + TS 项目需求数据导出功能,前端需要实现文件下载功能 后端返回的是文件的 url 地址 (本项目中返回的是阿里云 oss 的文件地址)

一、实现思路

从后端得到的是一个 url 地址,先通过 fetch api 请求这个 url 地址并转换成 blob 对象,通过 URL.createObjectUrl() 将 blob 对象生成 url 地址,绑定到 <a > 标签 的 href 属性上面,结合 download 来实现点击 <a > 标签下载文件

二、具体实现1.完整代码

代码如下:

function exportData() { let data = getForm().getFieldsValue(); exportTowerHistoryToExcel({ deviceId, createTime: data.startTime }).then((url) => { downLoadFile(url); }); }function downLoadFile (url){ let fileName = url.slice(url.lastIndexOf('/') + 1); // 这里是通过从后端获取到的 url 地址中截出来原本的文件名 fetch(url) .then((res) => res.blob()) .then((blob) => { const link = document.createElement('a'); link.href = URL.createObjectURL(blob); // 下载文件的名称及文件类型后缀 link.download = fileName; document.body.appendChild(link); link.click(); //在资源下载完成后 清除 占用的缓存资源 window.URL.revokeObjectURL(link.href); document.body.removeChild(link); });}2.代码分析2.1 通过 fetch 将 url 地址转换为 blob 对象

以下图片来自w3cschool文档 fetch_api

分析vue 中从后端获取到文件的 url 地址,前端根据 url 地址下载文件(vue怎么拿到后端数据)

res.blob() 的返回值是什么 从文档中我们知道res.blob() 返回的并不是一个 blob 对象,而是一个 Promise,继续 .then 获取到的才是 blob 对象

res.blob() 到底做了什么 每调用一次 res.blob() 都会执行 consume budy 的动作 执行流程大概是这个样子 : 获取字节流的读取器 --> 通过读取器来读取到所有的数据 --> 将数据包装成 blob 对象并返回

2.2 通过 URL.createObjectUrl() 将 blob 对象生成 url 地址

以下图片来自MDN文档 URL.createObjectURL()

分析

URL.createObjURL() 做了什么 我们在调用 URL.createObjURL() 的时候传递的参数是一个 blob 对象,每次调用 URL.createObjURL() 的时候,都会创建一个新的 URL 对象 注意 : 即使是用同一个 blob 对象 , 每次调用 URL.createObjURL() 都会生成不同的 URL 对象

生成的的 URL 对象什么时候会被释放 浏览器在 docoment 卸载的时候,会自动释放 为了获得最佳性能和内存使用状况,应当在不需要使用这些 URL 对象的安全的实际,主动释放掉他们

怎么释放生成的的 URL 对象 通过调用 URL.removeObjectURL(需要释放的URL ) 可以来释放生成的 URL 对象

2.3 创建 <a> 标签元素,将该元素放到页面当中,并通过点击事件来实现下载功能<a href="xxxxx"><a href="xxxxx" download="xxxx">

href:文件的绝对/相对地址 download: 文件名(可省略,省略后浏览器自动识别源文件名 , 但是有可能导致自动识别源文件名的时候没有文件后缀,导致文件没有格式)

const link = document.createElement('a'); link.href = URL.createObjectURL(blob); // 下载文件的名称及文件类型后缀 link.download = fileName; // 这里 download 可以不写 document.body.appendChild(link); link.click();总结

其实找到这个解决方案的时候直接拿来用挺顺利的,但是一开始并不明白它是怎么工作的,甚至每行都没太明白它为什么这么做,在整理下来的过程中,反而理解了一些东西,与君共勉~

本文链接地址:https://www.jiuchutong.com/zhishi/283921.html 转载请保留说明!

上一篇:压缩gltf/glb模型踩坑与解决 three.js DRACOLoader(压缩模制)

下一篇:获取街道、镇级的地图geoJson数据方法,使用echarts绘制出街道、镇级的地图区域画面(中山市为例)(当地街道)

  • vivox50电池是多大的(vivo x50的电池是多少)

    vivox50电池是多大的(vivo x50的电池是多少)

  • 微信怎么群发消息(微信怎么群发消息给指定群)

    微信怎么群发消息(微信怎么群发消息给指定群)

  • iphone11pro续航时间(iphone11pro 续航)

    iphone11pro续航时间(iphone11pro 续航)

  • 此文件无法播放,这可能是因为(此文件无法播放文件格式不受支持)

    此文件无法播放,这可能是因为(此文件无法播放文件格式不受支持)

  • 关系型数据库以什么形式储存数据及二维表(关系型数据库以提升计算机性能的方式进行扩展)

    关系型数据库以什么形式储存数据及二维表(关系型数据库以提升计算机性能的方式进行扩展)

  • 记事本的默认扩展名(记事本的默认扩展名为()AXLSBTXTCCOMDEXE)

    记事本的默认扩展名(记事本的默认扩展名为()AXLSBTXTCCOMDEXE)

  • 荣耀旗舰机是哪个系列(荣耀旗舰机是哪款)

    荣耀旗舰机是哪个系列(荣耀旗舰机是哪款)

  • 电子邮件可以发附件吗(电子邮件可以发送声音和视频吗)

    电子邮件可以发附件吗(电子邮件可以发送声音和视频吗)

  • 钉钉提交作业有时间限制吗(钉钉提交作业有张数限制吗)

    钉钉提交作业有时间限制吗(钉钉提交作业有张数限制吗)

  • 文件夹不能直接发送吗(文件夹不能直接看到图片)

    文件夹不能直接发送吗(文件夹不能直接看到图片)

  • 小米note黑屏充电没反应(小米手机黑屏充电没反应是怎么回事)

    小米note黑屏充电没反应(小米手机黑屏充电没反应是怎么回事)

  • 局域网的拓扑结构主要有(局域网的拓扑结构应当是指它的物理拓扑结构)

    局域网的拓扑结构主要有(局域网的拓扑结构应当是指它的物理拓扑结构)

  • 华为mate30耳机孔在哪(华为mate30耳机孔型号)

    华为mate30耳机孔在哪(华为mate30耳机孔型号)

  • 滴滴属于腾讯还是阿里(滴滴属于腾讯还是腾讯)

    滴滴属于腾讯还是阿里(滴滴属于腾讯还是腾讯)

  • 苹果x为什么充不进去电(苹果x为什么充电充到80自己停了)

    苹果x为什么充不进去电(苹果x为什么充电充到80自己停了)

  • 咸鱼拍下改价什么意思(咸鱼拍下 改价)

    咸鱼拍下改价什么意思(咸鱼拍下 改价)

  • 荣耀20s怎么关闭防误触模式(荣耀20s怎么关闭hd)

    荣耀20s怎么关闭防误触模式(荣耀20s怎么关闭hd)

  • 苹果商店没有小红书(苹果商店没有小桔充电)

    苹果商店没有小红书(苹果商店没有小桔充电)

  • set协议是什么(set协议的工作原理)

    set协议是什么(set协议的工作原理)

  • nx609j是红魔几(nx669j红魔什么型号)

    nx609j是红魔几(nx669j红魔什么型号)

  • 手机号暂停服务怎么办(手机号暂停服务怎么回事)

    手机号暂停服务怎么办(手机号暂停服务怎么回事)

  • a7x有遥控器功能吗(a7r 手机遥控)

    a7x有遥控器功能吗(a7r 手机遥控)

  • 华为手机怎么快速回朋友圈顶部(华为手机怎么快速充电的方法)

    华为手机怎么快速回朋友圈顶部(华为手机怎么快速充电的方法)

  • 对方手机关机怎么定位(对方手机关机怎么强制联系)

    对方手机关机怎么定位(对方手机关机怎么强制联系)

  • 华为手机屏幕有个圆圈消除方法(华为手机屏幕有个圆点怎么取消)

    华为手机屏幕有个圆圈消除方法(华为手机屏幕有个圆点怎么取消)

  • IE浏览器如何取消阻止弹出窗口(IE浏览器如何取消全屏)

    IE浏览器如何取消阻止弹出窗口(IE浏览器如何取消全屏)

  • 404 not found意思详细介绍

    404 not found意思详细介绍

  • AI - AI绘画的精准控图(ControlNet)(ai绘画图片)

    AI - AI绘画的精准控图(ControlNet)(ai绘画图片)

  • DINO 论文精度,并解析其模型结构 & DETR 的变体(精读论文分析)

    DINO 论文精度,并解析其模型结构 & DETR 的变体(精读论文分析)

  • 契税是什么样的单子
  • 小规模纳税人能开专票吗
  • 不含税的金额
  • 电子税务局没有发票开具
  • 兼职劳务税率是多少2020
  • 外贸企业出口怎么写
  • 一般纳税人增值税申报操作流程
  • etc充值怎么操作
  • 天猫国际的店铺是正品吗 感觉很便宜
  • 其他应收款账户期初借方余额为35400
  • 贷款计提利息会计分录
  • 技术服务费收入怎么确认收入
  • 会计凭证的概念及分类
  • 公司团建活动奖状模板
  • 社会团体收取的会费可以用于哪些方面
  • 小微企业可以抵税吗
  • 工程结算完后剩余资金如何处理?
  • 食堂伙食费需要开票吗
  • 个人所得税更正申报有滞纳金吗
  • 抵扣联复印件可以做账吗
  • 微软发布Windows 10正式版 新浪
  • 银行利息为什么只算10个月
  • 认证未抵扣往哪里记
  • 间接费用是什么费用
  • 收到汇算清缴的现金
  • 计算机系统结构第三版课后答案
  • php对称加密算法实验报告
  • Linux下which、whereis、locate、find 区别
  • 客户申请退款商家拒绝退货退款会有什么效果
  • 现在学修电脑怎么样
  • session.php
  • php的项目
  • 提取的盈余公积是所有者权益吗
  • 伫立枝头的旅鸫鸟,加拿大 (© marcophotos/Getty Images)
  • 超分辨率图像复原
  • 分公司从事研发怎么样
  • 投资性房地产成本法账务处理
  • 基于Java+SpringBoot+Vue+uniapp微信小程序零食商城系统设计和实现
  • js 切面
  • php动态生成网页
  • web网页设计期末作业猫眼电影首页
  • php封装app打包
  • wordpress mobile themes
  • mysql ndb innodb
  • 收购发票的开具管理
  • 股息红利所得为什么按照分配所得的企业所在地确定
  • 金蝶迷你版怎么打印明细账
  • 用发票做账是什么意思?
  • mysql 表不存在报错信息
  • 财务软件期末处理
  • 企业收到个体户的普通发票还需要缴纳20%的税吗
  • 实物返利的税务处理
  • 外国专家经费管理办法
  • 企业解散清算程序
  • 融资租赁固定资产利息的账务处理实例
  • 银行已入账
  • 一般纳税人劳务费税率是多少2023
  • 房地产 监控
  • sqlserver正则表达式替换列
  • 如何使用easyscan
  • 联想lenovo小新pro16 2023版
  • win8 无线网
  • 笔记本电脑自动断开
  • 360杀毒恢复区
  • linux wechat
  • w7系统cf怎么调烟雾头
  • 微软警告:64位Win7系统或无法安装KB3033929补丁更新
  • ftp自动上传文件到服务器
  • centos创建一个文件
  • .mcp是什么文件
  • win8鼠标右键无法弹出菜单
  • node.js操作文件
  • bootstrap应用
  • js中的onchange
  • 一次性批量随机抽取
  • jQuery使用animate实现ul列表项相互飘动效果示例
  • python类属性和类方法
  • 现在还有地方税务登记证吗
  • 代理记账管理办法2023
  • 百旺税控盘怎么清卡
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设