需求就是下载一个Excel文件,包括下载,导出,都是调用后端的接口。因为文件名返回再了响应头的content-disposition。前端需要进行一个处理,拿到文件名。


先上代码

  downloadDefaultExcelTemplate() {const url = process.env.BASE_API + '/sys/get_account_begin_temp/'const a = document.createElement('a')// 使用fetch方法获取response.headers响应头fetch(url).then(res => {console.log('res', res)// 切割出文件名const fileNameEncode = res.headers.get('content-disposition').split('filename=')[1]// 解码const fileName = decodeURIComponent(fileNameEncode)console.log('fileName', fileName)// 使用blob()方法获取blob对象数据res.blob().then(res => {console.log('bolbs', res)// 设置type类型const blob = new Blob([res], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; application/octet-stream'})const fileUrl = window.URL.createObjectURL(blob)a.href = fileUrlconsole.log('url', fileUrl)a.setAttribute('download', fileName)a.style.display = 'none'a.click()a.remove()})})},

这里使用fetch()去调用,是因为需要拿到响应头。而我们项目封装的api,经过响应拦截,直接返回的是response.data。拿不到response的话,就没法拿到其中的headers。为了不影响全局的api使用,就对下载文件的方法,单独使用fetch来处理。

注意事项:
fetch(url).then( res => res.blob() ) .then( blob =>{ } )
fetch()的第一个then回调返回的是response,第二个then返回的才是后端的数据。
但考虑到我需要获取文件名,并进行分割,解码等操作。所以我直接在fetch()的第一个then里获取response之后进行代码逻辑的编写。我们需要将response转为blob对象数据,可以使用res.blob()方法。
decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。

const blob = res.blob( ) // 这种写法是错误的,取到的是undefined
它的回调res才是真正想要的blob数据
res.blob().then(res=>{
console.log(‘blob值:’,res)
})

使用fetch()获取响应头的content-disposition拿到文件名,下载Excel文件相关推荐

  1. node获取响应头Authorization的方法

    node获取响应头Authorization的方法 首先申明这个问题不是前端来处理的,而是后端后端后端后端后端后端后端后端 相信大家都碰到过Refused to get unsafe header & ...

  2. react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...

  3. java文件流下载excel_React获取Java后台文件流下载Excel文件

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...

  4. php使用curl_exec 获取响应头存在多个HEADER问题解决

    前言: 近期在接一个第三方支付的时候,遇到一个比较头大的问题,因为第三方会把部分响应结果放在header里传输,需要从头里取数据后解密使用,我在本地是正常的,但是放到服务器上就一直是失败,因为取不到对 ...

  5. python 批量获取ip的国家省份市区以及运营商生成excel文件

    废话不多说直接上代码 这里有几个点需要注意下 #!/usr/bin/env python # -*- coding: utf-8 -*- import requests from bs4 import ...

  6. python构造响应头_Python爬虫库requests获取响应内容、响应状态码、响应头

    首先在程序中引入Requests模块 import requests 一.获取不同类型的响应内容 在发送请求后,服务器会返回一个响应内容,而且requests通常会自动解码响应内容 1.文本响应内容 ...

  7. python request返回的响应_Python爬虫库requests获取响应内容、响应状态码、响应头...

    首先在程序中引入Requests模块 import requests 一.获取不同类型的响应内容 在发送请求后,服务器会返回一个响应内容,而且requests通常会自动解码响应内容 1.文本响应内容 ...

  8. php获取curl头_php中CURL请求头和响应头获取方法

    本文主要和大家分享php中CURL请求头和响应头获取方法,希望能帮助到大家. 1.从CURL中获取响应头$oCurl = curl_init(); // 设置请求头, 有时候需要,有时候不用,看请求网 ...

  9. 网络编程(发送get和post请求到服务器端,并获取响应)

    一:B/S结构,浏览器端到服务器端通信依赖http协议 交互过程: 1:在浏览器地址栏输入http://ip:port/应用/资源路径 2:浏览器根据ip和服务器建立连接,port确定和那个应用进行交 ...

最新文章

  1. 抓住「金九银十」的尾巴!技术面试如何准备,谷歌面试官亲授
  2. cannot resolve symbol ‘R‘ 程序包R不存在
  3. linux安装创建逻辑卷,Linux系统LVM逻辑卷的创建与扩容(命令详解,图文并茂)...
  4. html select 修改默认箭头样式,自定义select标签箭头样式
  5. 终于过了。。。。。。。。。。。
  6. 跟我一起创建一个简单的javascript ajax对象 ---献给Web开发初学者
  7. vue滚动条禁止_vue.js中实现禁止浏览器滚动方法
  8. Spark UI在虚拟机中可以打开,但是在宿主机上无法访问
  9. httpd配置ResponseHeader
  10. 从TIN获取任意坐标点高程(原创)
  11. java插件不启动_java-插件安装后Eclipse启动问题
  12. MATLAB计算不定积分与定积分
  13. matlab 伽马校正曲线,【图像处理知识复习】02伽马校正matlab,C++实现
  14. 百度搜索引擎都有哪些算法
  15. java计算两个经纬度之间的直线距离
  16. 中国 IM 企业的新机会?揭秘融云全球通信云网络背后的技术 | 对话 WICC
  17. java的基本数据类型有哪些
  18. 责任链模式实践之Zuul责任链模式
  19. 利用GoogleTampermonkeyModify Headers实现问卷星调查问卷的自动填写提交
  20. 【VINS-Mono】

热门文章

  1. 网络安全专业应该从事哪个方向前景比较好
  2. CSS 基于文字的图片马赛克你见过吗
  3. 在Unity中如何制作动画
  4. 概念 多路复用 到底是个啥?通俗易懂的理解
  5. [FATAL] [DBT-10317] Specified SID Name (orcl) already exists.dbca建库报错
  6. 北京丰面颊多长时间能恢复【咨询脂肪专家王明利博士】
  7. Divide and Conquer:Question-Guided Spatio-Temporal Contextual Attention for Video Question Answering
  8. 客户端存储和http缓存
  9. 云计算与服务器高校教材,高校云计算的发展与建设
  10. 安卓手机实现无需下载即可预览pdf文件