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

  • 已认证进项税额怎么结转
  • 公司纳税证明怎么开
  • 增值税存量和增量留抵退税
  • 停车费定额发票税率
  • 为什么营业成本比营业收入大的时候没有计提减值准备呢
  • 企业购买电话充值卡的分录
  • 发票报销的条件是什么?
  • 公司成立筹备工作小组主要任务是什么
  • 上年度重复结转会计分录
  • 多交的应交税费怎么算
  • 小型微利企业享受企业所得税减免优惠时主要留存备查
  • 农产品所得税扣除比例
  • 收取的职工房租如何入账
  • 企业申请增值税专用发票
  • 什么公司不需要融资
  • 工程服务税收的分类
  • 税控盘开票显示操作未授权
  • 计划成本法如何计算材料成本差异率
  • 非货币性资产交换准则
  • 管理不善造成的损失怎么处理
  • 所得税计税方法
  • 无票收入负数怎么报增值税
  • 对公账户转账有延迟吗
  • 宣传用品发票包括哪些
  • 预提长期借款利息的会计分录怎么写
  • 上市公司资产重组办法
  • 投资类公司增资
  • 社保基数填错了 可以退款吗
  • 职工教育经费包括餐费吗
  • deepin怎么退出命令行
  • php解密在线
  • win10电脑设备管理器在哪
  • 企业所得税计税依据
  • 不征税收入符合的条件
  • 销售折让怎么开票
  • 企业注销时实收资本需要交税吗
  • lcasensor是什么进程
  • php图片加文字水印
  • 出口信用保险补贴算不算政府补助
  • 分公司可以给总公司开发票么
  • 企业采购过程中发生的材料短缺
  • 3d reconstruction
  • php实现文件上传的函数
  • dpkg --list
  • 甲供材料总额法和差额法
  • 应交增值税科目设置及账务处理
  • 织梦前台数据不能存入中文
  • 其他应收款增加会计分录
  • 个人独资企业法主要内容
  • 企业清算未分配利润怎么个税
  • 盈余公积转增资本对会计要素的影响
  • 货款减免协议
  • 固定资产折旧如何进行会计处理
  • 中标服务费计入合同取得成本
  • 出售未计提完折旧的固定资产需要折扣吗
  • 销售自产农产品怎么核算成本
  • mysql多表内连接查询
  • window9为什么没有
  • 如何彻底关闭mac电脑app
  • java开发经常出差合理吗
  • 安装硬盘视频教程
  • windows刷新快捷键是什么
  • Windows时间同步时出错该怎么解决?
  • win10临时文件设置
  • ubuntu pdf编辑器
  • 苹果电脑快捷键截图怎么截
  • linux怎么看历史记录
  • windows下打开注册表的命令是什么
  • win1021h2正式版
  • iptables入门
  • Windows8和Windows8 RT版的区别介绍
  • django 验证码
  • opengl纹理错误变成条纹
  • js动态改变div内容
  • js设置滚动条滚到底部
  • nodejs sleep方法
  • android 高德地图收费
  • 简述javascript中的函数
  • 浙江电子税务局移动端
  • 税务检查的程序
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设