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

  • 小米air2 se怎么切换下一首(小米air2se怎么恢复双耳模式)

    小米air2 se怎么切换下一首(小米air2se怎么恢复双耳模式)

  • 苹果手机打游戏怎么设置消息免打扰(苹果手机打游戏时屏幕突然变暗)

    苹果手机打游戏怎么设置消息免打扰(苹果手机打游戏时屏幕突然变暗)

  • 华为mate40pro像素大小(华为Mate40pro像素模糊怎么办)

    华为mate40pro像素大小(华为Mate40pro像素模糊怎么办)

  • 淘宝的免密设置怎么取消(淘宝的免密设置怎么关闭)

    淘宝的免密设置怎么取消(淘宝的免密设置怎么关闭)

  • 闲鱼收款会在哪里(闲鱼收款到哪里去了)

    闲鱼收款会在哪里(闲鱼收款到哪里去了)

  • 手机换了电池还是耗电快怎么办(手机换了电池还是耗电快)

    手机换了电池还是耗电快怎么办(手机换了电池还是耗电快)

  • 华为p40pro可以用谷歌吗(华为p40pro可以用120w快充吗)

    华为p40pro可以用谷歌吗(华为p40pro可以用120w快充吗)

  • 抖音怎么隐身进直播间(抖音怎么隐身进去直播间还能聊天)

    抖音怎么隐身进直播间(抖音怎么隐身进去直播间还能聊天)

  • qq什么情况下会显示正在输入(qq什么情况下会推荐可能认识的人)

    qq什么情况下会显示正在输入(qq什么情况下会推荐可能认识的人)

  • 常用的段落对齐方式(段落对齐方式有5种,分别是)

    常用的段落对齐方式(段落对齐方式有5种,分别是)

  • 华为手机怎么调音量大小(华为手机怎么调锁屏时间长短)

    华为手机怎么调音量大小(华为手机怎么调锁屏时间长短)

  • vue怎么设置播放时长(vue播放器)

    vue怎么设置播放时长(vue播放器)

  • 苹果x红外线灯怎么设置(苹果x红外坏了怎么办)

    苹果x红外线灯怎么设置(苹果x红外坏了怎么办)

  • 华为手机颜色变成黑白了怎么设置(华为手机颜色变黄怎么恢复)

    华为手机颜色变成黑白了怎么设置(华为手机颜色变黄怎么恢复)

  • qq表情变问号怎么恢复(qq表情发出去是问号)

    qq表情变问号怎么恢复(qq表情发出去是问号)

  • 华为麦芒8什么时候出(华为麦芒8什么型号)

    华为麦芒8什么时候出(华为麦芒8什么型号)

  • 小米8定位设置在哪(小米8定位设置在哪里打开)

    小米8定位设置在哪(小米8定位设置在哪里打开)

  • win10专业版激活秘钥/激活码/序列号分享 附激活工具+教程(win10专业版激活密钥永久2023)

    win10专业版激活秘钥/激活码/序列号分享 附激活工具+教程(win10专业版激活密钥永久2023)

  • 计算机毕业设计——简单的网页设计(计算机专业的毕业设计作品新颖)

    计算机毕业设计——简单的网页设计(计算机专业的毕业设计作品新颖)

  • 如何理性看待国内大热的HuTool工具包(如何理性看待国企改革)

    如何理性看待国内大热的HuTool工具包(如何理性看待国企改革)

  • python开发环境是什么(什么叫python的开发环境)

    python开发环境是什么(什么叫python的开发环境)

  • 织梦dedecms自定义表单获取IP地址和提交时间(织梦怎么改网站主页)

    织梦dedecms自定义表单获取IP地址和提交时间(织梦怎么改网站主页)

  • 什么情况下纳税人和负税人一致
  • 公司组织旅游费用报个税吗
  • 商贸公司可以做美容行业吗?
  • 逆流交易合并报表抵消分录
  • 什么产品可视同自产产品享受退税优惠
  • 垫付的医疗费保险多久可以报销
  • 房屋建筑物折旧率计算
  • 冲借款的凭证怎么做
  • 合同里包括产品销售和服务如何开票?
  • 季度末需要结转什么科目
  • 那些发票可以报
  • 怎么分清楚待认识的人
  • 什么叫未完税
  • 期末未分配利润大于期初未分配利润+期末净利润
  • 企业用户纳税人识别号不合法
  • 生产酒的税收是多少
  • 企业享受小型微利政策
  • 股东收回投资款的现金流量
  • 跨月发票作废应如何处理
  • 公司在银行购买金币没有发票
  • 应收账款重分类什么意思
  • 股权转让协议解除返还股权优先权
  • 购货方收到红字发票计入进项税转出还是进项税额负数?
  • 汽车修理公司的成本怎么核算
  • 交易性金融资产的入账价值
  • 企业转手员工工龄怎么算
  • mssearch.exe - mssearch是什么进程 有什么用
  • linux添加系统用户命令
  • 开立异地银行结息通知
  • slam方法
  • 短缺材料赔偿会计分录
  • 两只小北极熊
  • 前端软件开发工具
  • framework架构
  • php全局变量和局部变量
  • nvme安装win10教程
  • 金税盘干嘛用
  • 会计证的作用和用途
  • 发票纳税人识别号错了怎么解决
  • python如何编写函数
  • 福利费工会经费教育经费计提比例
  • 过路费属于会计哪个科目
  • 网上学电脑哪个软件好
  • sse后端向前端推送 前端只能收到 末尾的值
  • 车票增值税抵扣怎么操作
  • 资产负债表中衍生金融资产项目应根据什么科目填列
  • 扣伙食费会计分录
  • 新准则制度体系的核心变化
  • 劳务分包的形式完成施工任务
  • 销售商品该如何改进服务
  • 存货成本主要包括
  • 设备融资租赁如何算综合利率
  • 存货周期怎么计算
  • 加油预付卡发票新规定文件
  • 纳税人id
  • mysql命令行导出表结构
  • sqlserver日期范围
  • windows延缓写入失败怎么修复
  • u盘安装win7系统鼠标键盘没反应
  • vmware虚拟机不能识别iso
  • bios启动项正确设置
  • 开机一直提醒ctrl+alt+del
  • window10 左下角
  • centos下载安装
  • sstray.exe - sstray是什么进程 有什么作用
  • centos怎么编写c语言
  • ie11打不开闪退解决办法win 7
  • win81with update
  • win7不能玩dnf
  • unity读取文本文件
  • bootstrap响应式工具使用详解
  • 批处理文件修改注册表键值
  • shell脚本的fi
  • 北京地税税务总局官网
  • 按照5%的征收率减按1.5%
  • 加计抵减怎么计提分录
  • 山东省国税局领导分工
  • 企业年金个人缴纳的辞职能拿吗
  • 国家税务总局简易征收最新文件
  • 2021年福建省灵活就业人员养老保险缴费标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设