位置: 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绘制出街道、镇级的地图区域画面(中山市为例)(当地街道)

  • 笔记本外接显示器怎么合上笔记本(笔记本外接显示器)(笔记本外接显示器怎么设置主副屏)

    笔记本外接显示器怎么合上笔记本(笔记本外接显示器)(笔记本外接显示器怎么设置主副屏)

  • 代理服务器出现问题(代理服务器的使用)(代理服务器出现问题,或者地址错误)

    代理服务器出现问题(代理服务器的使用)(代理服务器出现问题,或者地址错误)

  • p40pro充电发热(华为p40pro充电发热算故障吗?)

    p40pro充电发热(华为p40pro充电发热算故障吗?)

  • 快手没有播放量是怎么回事(快手没有播放量不上热门的原因)

    快手没有播放量是怎么回事(快手没有播放量不上热门的原因)

  • 腾讯会议设置的时间会自动结束吗(腾讯会议设置的会议时间到了怎么延长)

    腾讯会议设置的时间会自动结束吗(腾讯会议设置的会议时间到了怎么延长)

  • 微信前往验证是什么意思(微信前往验证是对方加我吗)

    微信前往验证是什么意思(微信前往验证是对方加我吗)

  • 电瓶车充电一闪一闪是什么意思(电瓶车充电一闪一闪绿灯)

    电瓶车充电一闪一闪是什么意思(电瓶车充电一闪一闪绿灯)

  • 蓝牙耳机不煲机后果(耳机不煲机会怎么样)

    蓝牙耳机不煲机后果(耳机不煲机会怎么样)

  • 西瓜视频能投屏电视吗(西瓜视频能投屏其他软件却不能投屏)

    西瓜视频能投屏电视吗(西瓜视频能投屏其他软件却不能投屏)

  • mp3mp4mp5mp6有什么区别(mp3mp4p5有什么区别)

    mp3mp4mp5mp6有什么区别(mp3mp4p5有什么区别)

  • b站一个账号可以几个人用(b站一个账号可以登两个手机吗)

    b站一个账号可以几个人用(b站一个账号可以登两个手机吗)

  • 8848手机有什么特殊功能(8848手机有什么特点)

    8848手机有什么特殊功能(8848手机有什么特点)

  • 微信聊天记录多长时间过期(微信聊天记录多久自动删除)

    微信聊天记录多长时间过期(微信聊天记录多久自动删除)

  • 京东亲情白条可以提现吗(京东亲情白条可以送给自己吗)

    京东亲情白条可以提现吗(京东亲情白条可以送给自己吗)

  • 如何将华为旧手机所有资料导入新手机(如何将华为旧手机所有资料导入iPhone)

    如何将华为旧手机所有资料导入新手机(如何将华为旧手机所有资料导入iPhone)

  • 苹果7要不要升级13

    苹果7要不要升级13

  • 苹果抹掉数据能恢复吗(苹果抹掉数据还能用吗)

    苹果抹掉数据能恢复吗(苹果抹掉数据还能用吗)

  • 谷歌代理服务器设置(谷歌代理服务器和防火墙在哪里设置)

    谷歌代理服务器设置(谷歌代理服务器和防火墙在哪里设置)

  • 微信运动不连网记步吗(微信运动不连网,是不是没有步数?)

    微信运动不连网记步吗(微信运动不连网,是不是没有步数?)

  • 外贸视频剪辑怎么做(外网视频剪辑)

    外贸视频剪辑怎么做(外网视频剪辑)

  • ipadair升级ios12(ipadair升级ios12教程)

    ipadair升级ios12(ipadair升级ios12教程)

  • 联邦学习(FL)+差分隐私(DP)

    联邦学习(FL)+差分隐私(DP)

  • 捐赠免税会计分录
  • 以前年度所得税滞纳金的账务处理
  • 税务师考试报名
  • 带薪年休假如果当年离职补交的年休假钱需要扣个税嘛
  • 应交税费科目的借贷方向
  • 收到返款计入什么科目
  • 月末进项税大于销项税怎么结转
  • 收到政府土地补偿,用于种植农作物
  • 印花税的计税依据为各种应税凭证上所记载的计税金额
  • 410768金税盘
  • 2019个体户经营所得税税率表
  • 成本少结转了怎么调回
  • 劳务报酬所得如何计税
  • 销售边角料收入属于什么收入
  • 计提高温补贴会计分录
  • 从公司账户转给个人账户取出来发给员工做过节费
  • 企业注销未分配利润要交个人所得税吗
  • 未交增值税怎么记账
  • 销项负数发票的抵扣联
  • 从关联企业获得非工资报酬怎么缴纳个税?
  • 认证的增值税发票怎么做成账本格式
  • 免税销售额收入不含税收入怎么算
  • 金税盘点了没反应
  • 销售房地产要交培训费是传销行为吗
  • 出租厂房算什么收入
  • 外商投资的企业是外资企业吗
  • 购进商品用于样品赠送的账务处理
  • 营改增贷款服务包括哪些
  • 小规模纳税人收到增值税专用发票怎么办
  • 印花税是怎么计税的
  • 华为分享连接电脑显示检查您的拼写
  • 合伙企业财产清算顺序
  • 付出去的款项退回的会计分录如何做
  • 如何免费获取win11
  • win11怎么更改壁纸
  • 公司备用金申请单
  • 用应付票据付应付账款
  • laravel 入门
  • 哈勃太空望远镜取得的部分成果有哪些
  • 机动车空白发票作废税务局需要提供说明
  • 迁徙的季节主要从哪几个方面写秋天的景物
  • 现金流量表补充资料怎么理解
  • 个体户怎么开发票免税
  • 金银首饰以旧换新增值税处理
  • vue-axios详细介绍
  • 房租费可以一次性摊销吗
  • 基础的数据类型
  • 新公司申请一般纳税人流程
  • 营运资产周转次数计算公式是什么意思
  • 赠送给客户的商品是否要计入费用?
  • 补贴收入是否交印花税
  • 保理公司的钱来自哪里
  • 应交税费和应交增值税的关系
  • 弥补亏损账务处理流程
  • 网上报税有没有时间限制
  • 预收账款和预付账款科目都是资产类科目
  • 小企业资产总额怎么计算
  • 认证未抵扣往哪里记
  • 公司员工报销油费
  • 公司买东西算什么费用
  • 应收账款坏账准备借贷方向
  • 年中重新建账还要年初数吗?
  • 建账的注意事项
  • sql只能查询数据,不能修改数据
  • 电脑键盘上f1到f12快捷键的功能分别是
  • win10系统将IIS服务器发送到桌面快捷方式方法
  • unity unity3d
  • ExtJS4利根据登录后不同的角色分配不同的树形菜单
  • jq复制元素
  • win7安装要求配置
  • jquery animate源码
  • 安卓优化清理大师怎么样
  • python数据导出
  • vue中使用js
  • 安卓实现单选题
  • jquery实现点击按钮
  • 废旧物资税务风险评估
  • 国家税务总局核定的该车最低计税价格
  • 怎么删除天眼查诉讼信息
  • 深圳国税局网站如何查询企业往年财务报表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设