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

  • 小米摄像头怎么插内存卡(小米摄像头怎么看回放)

    小米摄像头怎么插内存卡(小米摄像头怎么看回放)

  • 苹果微信怎么变黑色主题(苹果微信怎么变声)

    苹果微信怎么变黑色主题(苹果微信怎么变声)

  • 苹果手机键盘变成英文了怎么办 (苹果手机键盘变小了)

    苹果手机键盘变成英文了怎么办 (苹果手机键盘变小了)

  • 抖音怎么上传1分钟以上的视频(抖音怎么上传1080p)

    抖音怎么上传1分钟以上的视频(抖音怎么上传1080p)

  • iphonex可以升级ios13.4.1吗(iPhonex可以升级iOS15.5)

    iphonex可以升级ios13.4.1吗(iPhonex可以升级iOS15.5)

  • 小程序如何退出登录(微信小程序如何退出)

    小程序如何退出登录(微信小程序如何退出)

  • 多媒体技术中的媒体一般指(多媒体技术中的多媒体指什么)

    多媒体技术中的媒体一般指(多媒体技术中的多媒体指什么)

  • 支付宝怎么解绑多个手机号(支付宝怎么解绑淘宝账号)

    支付宝怎么解绑多个手机号(支付宝怎么解绑淘宝账号)

  • 华为p30删除的照片怎么找回(华为p30删除照片怎么恢复)

    华为p30删除的照片怎么找回(华为p30删除照片怎么恢复)

  • 21700和18650区别(21700和18650区别哪个好)

    21700和18650区别(21700和18650区别哪个好)

  • 无法连接打印机0x000000a(无法连接打印机请检查打印机名并重试)

    无法连接打印机0x000000a(无法连接打印机请检查打印机名并重试)

  • wlanmac地址是什么意思(wlan mac地址是固定的吗)

    wlanmac地址是什么意思(wlan mac地址是固定的吗)

  • 小米8是几a快充(小米8是2.1a快充吗)

    小米8是几a快充(小米8是2.1a快充吗)

  • 华为mate20pro屏幕有几种(华为mate20pro屏幕材质)

    华为mate20pro屏幕有几种(华为mate20pro屏幕材质)

  • 三星s8快充是多少瓦(三星s8标准充电和快速充电)

    三星s8快充是多少瓦(三星s8标准充电和快速充电)

  • 为什么拍的抖音被限流(为什么拍的抖音不见了)

    为什么拍的抖音被限流(为什么拍的抖音不见了)

  • 抖音怎么刷新新的内容(抖音怎么刷新新作品)

    抖音怎么刷新新的内容(抖音怎么刷新新作品)

  • win10纯净版和正版区别(windows10纯净版好用吗)

    win10纯净版和正版区别(windows10纯净版好用吗)

  • word表格怎么设置左右边距(word表格怎么设置外框线和内框线)

    word表格怎么设置左右边距(word表格怎么设置外框线和内框线)

  • oppo手机如何设置打印机(oppo手机如何设置高清通话)

    oppo手机如何设置打印机(oppo手机如何设置高清通话)

  • CAD图形界限怎么取消(cad图形界限怎么设置)

    CAD图形界限怎么取消(cad图形界限怎么设置)

  • qq达人什么时候开始的(qq达人什么时候出来的)

    qq达人什么时候开始的(qq达人什么时候出来的)

  • Tensorflow和pytorch的区别是什么?哪个更好?(tensorflow theano)

    Tensorflow和pytorch的区别是什么?哪个更好?(tensorflow theano)

  • 帝国Cms中如何实现tag标签中文url(帝国cms使用手册)

    帝国Cms中如何实现tag标签中文url(帝国cms使用手册)

  • 计提印花税会计凭证怎么做
  • 增值税发票综合服务平台错误代码35
  • 民办非企业免税额度
  • 30万的车税可以抵多少
  • 境外企业所得税税率
  • 会计核算过程中的计量尺度通常有
  • 应付福利费直接计入未分配利润
  • 房地产企业契税税率是多少
  • 契税缴纳企业所得税吗
  • 所有的进项税都在借方吗
  • 药店税票税点
  • 国税代开普通发票现需作废需要哪些资料?
  • 学生兼职需要交什么税
  • 印花税无法申报怎么回事
  • 琥珀销售用语
  • 出口佣金比例
  • 客户支付货款时扣除了手续费
  • 小规模通行费发票可以抵扣吗
  • 取得专用发票是进项还是销项
  • 购买货车预付保险怎么算
  • 赠与合同公证收费标准
  • php?ms=0&qgg=&_wv=3
  • ElementPlusError:[ElPagination] 你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档
  • 王者荣耀体验皮肤什么时候结束
  • PHP:session_regenerate_id()的用法_Session函数
  • 外贸企业出口退税账务处理
  • 巨浪向我冲来改为拟人句
  • phpstrcmp函数
  • 坏账准备属于哪一类账户
  • php替换文本指定内容
  • js 切面
  • yii gridview
  • 技术部周报怎么写
  • 【机器学习】9种回归算法及实例总结,建议学习收藏
  • 汇算清缴补交所得税怎么做凭证
  • hexdump windows
  • 公司对公账户没有流水怎么办
  • 其他综合收益属于什么类
  • 金税盘怎么增加收款人和复核人
  • 工资薪金个人所得税在哪里申报
  • 应付账款账户的结构与什么账户相似
  • 坏账准备的核算
  • 税控盘没有抄税是什么意思
  • 公司地址的变更需要哪些资料和手续
  • 支付临时工人的报酬属于工资薪金概算吗
  • 原材料存货跌价准备
  • 制造费用需要本年累计吗
  • 化肥贸易行业
  • 农业机耕属于种植业吗
  • 物流公司的会计怎么样
  • 香港公司账户收美元要交税吗
  • 房地产核算成本方法
  • win10系统怎么手机投屏到电脑
  • mac如何隐藏桌面
  • 打开win七
  • linux如何修改文件创建时间
  • 晨枫U盘启动工具v2.0
  • win7怎么看最近访问位置
  • 个性化定制方案怎么写
  • mac的替换在哪里
  • pm是什么软件的缩写
  • 微软在中国的代理公司
  • linux软件少
  • windows 10预览版
  • bootstrap modal 位置
  • HTML:scrollLeft,scrollWidth,clientWidth,offsetWidth完全详解
  • unity3d总结
  • linux做ftp
  • JavaScript中Number.MIN_VALUE属性的使用示例
  • python 文件操作,读,写,指定位置
  • 源码搜索
  • android sdk api文档
  • 税务局哪些部门轻松待遇好
  • 生猪屠宰企业报价
  • 小规模纳税人专票开1%还是3%
  • 千兆交换机涨价
  • 欠账6万怎么还
  • 红伞伞儿歌寓意着什么
  • 津补贴怎么算
  • 福建税务网址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设