前端通过基于Get请求的接口下载文件

第一次写前端,可能有些不对的地方,欢迎批评指正!

1.情况概述:

现有一个基于Get请求的后端接口,需要通过这个接口来下载文件

2.探索过程:

1、一开始看见网上有写到使用 <a> 标签通过超链接的方式来实现点击下载,但是因为请求和参数需要统一管理,所以这种方法不可取,pass!

2、然后基于上一种方法继续往下摸索,然后发现可以在 js 中使用 window.open(url) 的方式来达到链接跳转的目的,然后跳转确实实现跳转了,但是并没有触发下载,然后发现 这个接口不是下载接口,再次无效!

3、接着这个往下思考,既然需要下载的链接,那么就拿到这个链接给到它不就行了吗(理想很丰满,现实很骨感,且听后序道来),在这种想法下去拿了 response.data 但是并没有数据,然后发现需要通过 url = window.URL.createObjectURL(new Blob([response.data]) 这样来拿到,起初并不知道这个是什么,但是可以拿到数据

4、但是拿到数据之后发现是一个这个格式的:blob:https://..... ,这个blob是个什么鬼?在网上查了一下是这么说的:“Blob 对象表示一个不可变、原始数据的类文件对象,且表示的不一定是JavaScript原生格式的数据”,具体啥意思?我也没看懂,哈哈!还是找一个大白话版的吧,这个是这么说的:“我们可以使用 Blob 对象隐藏真实的资源路径,在一定程度上可以起到数据的加密性,更多的是为了干扰爬虫;比如日常使用的一些音频,视频,图片,我们都可以使用其 Blob 二进制数据流来表征数据,而非使用 uri,就像经常用到的 image src 的 dataUrl”,这么一看就顺畅多了,简单理解成 “有一定加密性的二进制数据流” 

5、到这就知道怎么百度了吧,嘿嘿~,以下就是怎么把它写到本地文件了,贴心boy,嘿嘿:

  const url = window.URL.createObjectURL(new Blob([response.data]))
  const link = document.createElement('a')
  link.style.display = 'none'
  link.href = url
  link.setAttribute('download', 'excel.xlsx')//excel.xlsx这个可以改,名和格式都可改
  document.body.appendChild(link)
  link.click()
  document.body.removeChild(link)

6、最后成功下载了!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值