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

  • word封面下划线怎么设置一样长(word封面下划线上写字)

    word封面下划线怎么设置一样长(word封面下划线上写字)

  • pr按导出无反应(pr导出不动了怎么办)

    pr按导出无反应(pr导出不动了怎么办)

  • 拼多多订单取消后钱什么时候返回来(拼多多订单取消通知还会发货吗)

    拼多多订单取消后钱什么时候返回来(拼多多订单取消通知还会发货吗)

  • 拼多多app怎么打开(拼多多APP怎么打大)

    拼多多app怎么打开(拼多多APP怎么打大)

  • 哔哩哔哩升级经验规则(哔哩哔哩的升级)

    哔哩哔哩升级经验规则(哔哩哔哩的升级)

  • 乐播投屏怎样克服延迟(乐播投屏怎样克隆到电视)

    乐播投屏怎样克服延迟(乐播投屏怎样克隆到电视)

  • 不收微信红包怎样知道发了多少(不收微信红包怎么回复)

    不收微信红包怎样知道发了多少(不收微信红包怎么回复)

  • 电脑能进bios进不了系统(电脑能进bios进pe就关机)

    电脑能进bios进不了系统(电脑能进bios进pe就关机)

  • iqooz1上市时间(iqooz1刚上市多少钱)

    iqooz1上市时间(iqooz1刚上市多少钱)

  • 组装一台计算机需要什么(组装一台计算机需要哪些硬件设备)

    组装一台计算机需要什么(组装一台计算机需要哪些硬件设备)

  • 微信群能单独换头像吗(微信群能单独换图片吗)

    微信群能单独换头像吗(微信群能单独换图片吗)

  • 移动应用授权失效(移动授权权限名词解释)

    移动应用授权失效(移动授权权限名词解释)

  • 手机被监听有什么特征(手机被监听有什么迹象)

    手机被监听有什么特征(手机被监听有什么迹象)

  • 手机打不开软件是怎么回事(为什么苹果手机打不开软件)

    手机打不开软件是怎么回事(为什么苹果手机打不开软件)

  • 固态硬盘接主板哪个口(固态硬盘接主板哪里的线)

    固态硬盘接主板哪个口(固态硬盘接主板哪里的线)

  • 系统开小差请稍后再试什么意思啊(系统开小差,问题加紧处理中)

    系统开小差请稍后再试什么意思啊(系统开小差,问题加紧处理中)

  • word自动排序号取消(word自动排序号123取消)

    word自动排序号取消(word自动排序号123取消)

  • 怎样在手机上交医保(怎样在手机上交养老保险)

    怎样在手机上交医保(怎样在手机上交养老保险)

  • ios字体是什么(苹果字体是干什么用的)

    ios字体是什么(苹果字体是干什么用的)

  • 卡显示hd是什么意思啊(卡信号显示hd)

    卡显示hd是什么意思啊(卡信号显示hd)

  • vivo手机怎么设置永不熄屏(vivo手机怎么设置锁屏密码)

    vivo手机怎么设置永不熄屏(vivo手机怎么设置锁屏密码)

  • wps怎么把摘要加进目录(wps怎么给摘要添加页码)

    wps怎么把摘要加进目录(wps怎么给摘要添加页码)

  • 华为热点资讯怎么关闭(华为热点资讯怎么关闭锁屏)

    华为热点资讯怎么关闭(华为热点资讯怎么关闭锁屏)

  • 短期出国流量怎么办理(出国流量怎么办理划算)

    短期出国流量怎么办理(出国流量怎么办理划算)

  • 前程无忧如何取消申请(前程无忧如何取消求职)

    前程无忧如何取消申请(前程无忧如何取消求职)

  • 帝国cms怎么采集信息(帝国cms采集标签)

    帝国cms怎么采集信息(帝国cms采集标签)

  • 抄税报税流程图片
  • 公司控股另一家公司的风险
  • 企业里面不征税的发票能报销吗
  • 个税是每个月都扣吗
  • 幼儿园属于小型幼儿吗
  • 销售金银首饰交什么税
  • 销售货物代垫的运费发生的增值税
  • 机票退票账务处理
  • 电子承兑汇票如何拆小
  • 未认证的进项税账务处理
  • 软件公司购进软件会计科目
  • 生产成本福利费用汇算清缴嘛
  • 企业店铺开发票可以要求补税点吗?
  • 能否异地进行税款支付?
  • 餐饮发票可以抵扣个人所得税吗
  • 增值税专票盖章盖在哪里
  • 可税前扣除的捐赠支出
  • 海关缴款书如何做账
  • 长期待摊费用无发票怎么处理
  • 物业收取的滞纳金怎么算
  • 个人取得的拍卖资格
  • 受托加工物资产生的成本怎么做会计核算?
  • 税控盘没清盘怎么处罚
  • 出售汽车属于什么费用
  • 长期股票期权的会计分录怎么做?
  • 法人往公户打款是实收资本还是借款
  • 吸甲醛最好的植物是什么?
  • 投入的生产线应该怎么做
  • 年终奖发放与补发的区别
  • i9是多少纳米的芯片
  • 专利权的期限是指专利权的实际有效期限
  • 适用增值税差额征税政策的纳税人填写差额后的销售额
  • php stristr函数
  • 确认应付职工薪酬是借方还是贷方
  • 房产税城镇土地使用税申报期限
  • 小型企业资产负债表
  • 应收账款确认无法收回
  • 税务机关代小规模纳税人开发票
  • 压缩的命令
  • lvm部署的命令
  • php源码破解
  • calc下载
  • 可供出售金融资产新准则叫什么
  • 计提 增值税
  • 劳务费800以上扣税标准
  • 核销发生的坏账损失
  • 母公司吸收合并全资子公司
  • 小规模企业每月收入多少可以不纳税
  • 低值易耗品指的价格
  • 小规模费用发票可以抵扣增值税吗
  • 本年利润的会计分录怎么做
  • 建筑施工企业质量管理规范
  • 预付款项核销
  • 暂估入库已结转成本,下月票回来,还用红冲吗
  • 社保金额不对到不了账
  • 利润表期初余额怎么填
  • 库存现金期末余额在哪方
  • sql server 数据查询
  • ubuntu docker教程
  • 如何查看solaris版本
  • win10怎么自定义壁纸
  • 如何把xp系统的软件删除
  • pruttct.exe - pruttct是什么进程 有什么用
  • win8系统如何
  • win8磁盘占用率100%
  • WIN7如何关闭自动关机
  • win8系统升级win8.1
  • 我的第二个姐姐用英语怎么说
  • nodejs入门教程
  • HTML <!DOCTYPE> 标签
  • cocos2dx视频教程
  • javascript简单
  • [置顶]星陨计划
  • 粒子特效代码
  • Android-Universal-Image-Loader 图片异步加载类库的使用
  • 工程开具增值税专用发票
  • 普通手写发票税点多少
  • 上海各区财政收入
  • 公司换届审计一般要多久
  • 地税服务费算什么科目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设