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

  • 苹果11手电筒在哪关闭(苹果11手电筒在哪里关闭)

    苹果11手电筒在哪关闭(苹果11手电筒在哪里关闭)

  • wps怎么截图一整页(wps怎么截图一整页不能往下拉)

    wps怎么截图一整页(wps怎么截图一整页不能往下拉)

  • 三星s6现在还能用吗(三星s6还能再战几年)

    三星s6现在还能用吗(三星s6还能再战几年)

  • 淘宝如何修改年龄(淘宝怎样修改年龄)

    淘宝如何修改年龄(淘宝怎样修改年龄)

  • 电脑prtsc截图保存在哪(电脑prscrn截图图片保存在哪里)

    电脑prtsc截图保存在哪(电脑prscrn截图图片保存在哪里)

  • 苹果11横屏设置在哪(苹果横屏设置怎么关闭)

    苹果11横屏设置在哪(苹果横屏设置怎么关闭)

  • 抖音最长可以上传多少时间的视频(抖音最长可以上传多大的视频)

    抖音最长可以上传多少时间的视频(抖音最长可以上传多大的视频)

  • 苹果可以应用分身吗(苹果可以应用分身淘宝吗)

    苹果可以应用分身吗(苹果可以应用分身淘宝吗)

  • 苹果applecart+版什么意思(applecarplat)

    苹果applecart+版什么意思(applecarplat)

  • ipad充电多久才能开机(ipad2021充电多久)

    ipad充电多久才能开机(ipad2021充电多久)

  • 笔记本一直不关机有影响吗(笔记本一直不关机只休眠)

    笔记本一直不关机有影响吗(笔记本一直不关机只休眠)

  • 滴滴资料审核要几天(滴滴资料审核要多久通过)

    滴滴资料审核要几天(滴滴资料审核要多久通过)

  • 华为畅享9nfc功能在哪(华为手机畅享9nfc在哪)

    华为畅享9nfc功能在哪(华为手机畅享9nfc在哪)

  • 多媒体信息不包括(多媒体信息包含哪些信息类型?)

    多媒体信息不包括(多媒体信息包含哪些信息类型?)

  • 怎么把下载的视频转换成mp4格式(怎么把下载的视频保存到手机相册)

    怎么把下载的视频转换成mp4格式(怎么把下载的视频保存到手机相册)

  • 天猫进口超市可以退货吗(天猫进口超市可以开发票吗)

    天猫进口超市可以退货吗(天猫进口超市可以开发票吗)

  • 怎样把手机音乐下载到u盘(怎样把手机音乐下载到u盘上)

    怎样把手机音乐下载到u盘(怎样把手机音乐下载到u盘上)

  • 淘宝店铺二维码在哪里找(淘宝店铺二维码是永久有效吗)

    淘宝店铺二维码在哪里找(淘宝店铺二维码是永久有效吗)

  • 快手直播不推送了咋办(快手直播不推送多久恢复)

    快手直播不推送了咋办(快手直播不推送多久恢复)

  • oppor15尺寸多少(oppor15有多大的尺寸呀?)

    oppor15尺寸多少(oppor15有多大的尺寸呀?)

  • 苹果11怎么设置自定义铃声(苹果11怎么设置铃声自己喜欢的歌曲)

    苹果11怎么设置自定义铃声(苹果11怎么设置铃声自己喜欢的歌曲)

  • 视频大于5分钟怎么发(视频大于5分钟如何传到手机)

    视频大于5分钟怎么发(视频大于5分钟如何传到手机)

  • word中怎么替换文本(word中怎么替换指定文字)

    word中怎么替换文本(word中怎么替换指定文字)

  • 手机被植入病毒的表现(怎么知道手机被植入病毒)

    手机被植入病毒的表现(怎么知道手机被植入病毒)

  • qq屏蔽对方还能看空间(QQ屏蔽对方还能加好友吗)

    qq屏蔽对方还能看空间(QQ屏蔽对方还能加好友吗)

  • 织梦图集整合layui上传可多图集多实例可会员多图集(织梦使用教程)

    织梦图集整合layui上传可多图集多实例可会员多图集(织梦使用教程)

  • 公司购买股票如何做账
  • 以前年度费用退回怎么做账
  • 建筑企业收到招聘短信
  • 更换电脑后个税信息如何导入
  • 从业人数和资产的关系
  • 折扣销售销售折扣销售折让有何区别
  • 进货没有开具发票能退吗
  • 人工材料成本怎么分配
  • 行政单位的会计要素
  • 冷库租赁收入税率
  • 开具发票时提示离线发票累计金额超限?教你如何处理
  • 企业筹办期多久
  • 广告费发票收到但是不抵扣怎么做账?
  • 电子产品企业用电量大吗
  • 发票收到本月进账怎么办
  • linux怎么使用命令
  • 公司网银付款和付款区别
  • 委托加工代收代缴增值税吗
  • win11资源管理器怎么打开
  • bios设置图文详解
  • linux系统已经得到了广泛的应用
  • 企业转手员工工龄怎么算
  • 向银行借入长期借款50万元
  • 增值税纳税申报首先要稽核比对
  • 城建税教育费附加和地方教育费附加税率
  • 最早的拍照手机是哪一年
  • 为什么会产生应收账款
  • 固定资产增加应计入什么
  • 何为租赁合同
  • 会计人员报销差额是多少
  • 预加载的目的是什么
  • 违约金赔偿款怎么开票
  • 采购预算测算依据
  • 建筑行业总分包怎么算
  • 自愿放弃增值税优惠怎么写
  • 计提折旧事考虑了残值净值怎么算
  • 二次封装机
  • 经营租入固定资产
  • 模型参数是什么意思
  • 债权资产包括哪些会计科目
  • 股东转股怎么办理
  • 高新技术企业研发人员比例要求
  • 公司购买基金入什么科目
  • 收到货款的会计分录怎么做账
  • 公司开电费发票该怎么入账?
  • 房地产城建税计税依据
  • 现金流量表两年数据分析
  • 疫情期间社保减免优惠政策几个月
  • 研发费用形成无形资产的摊销怎么处理
  • 无法收回的应收账款怎么做分录
  • 宣传费怎么做账
  • 银行存款支付比例规定
  • 可转债举例说明
  • 小规模可以开红网吗
  • 出口为什么没有增值税
  • 工程未完工,费用怎么处理
  • 金税三期网络设置
  • mysql 修改值
  • VMWare linux mysql 5.7.13安装配置教程
  • win7系统u盘打不开怎么办
  • win7误删注册表
  • WinXP老显示器CRT显示器严重闪屏的修复方法
  • xp系统桌面图标大小怎么调整
  • vs图片简单
  • win7安全防护怎么关闭
  • win10查看驱动
  • cocos2dx webview
  • pygal python
  • jquery插件怎么写
  • 梦见擦窗户框
  • kmp算法代码完整实现
  • javascript Window及document对象详细整理
  • JS backgroundImage控制
  • listview
  • 婚前买房婚后个人还贷卖房怎么签字
  • 每月个人所得税申报截止时间是几号
  • 已申报的纳税申报表怎么修改
  • 咨询服务费税率2020小规模
  • 办理增值税一般纳税人所需资料
  • 国税合并地税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设