Javascript前端下载后台传来的文件流代码实例


Posted in Javascript onAugust 18, 2020

前台请求数据:

url: '/app/downloadApp',
 method: 'get',
 responseType: 'blob',
 params: data

设置接收参数格式为responseType: ‘blob',

downloadFile(res, fileName) {
   if (!res) {
    return
   }
   if (window.navigator.msSaveBlob) { // IE以及IE内核的浏览器
    try {
     window.navigator.msSaveBlob(res, fileName) // res为接口返回数据,这里请求的时候已经处理了,如果没处理需要在此之前自行处理var data = new Blob([res.data]) 注意这里需要是数组形式的,fileName就是下载之后的文件名
     // window.navigator.msSaveOrOpenBlob(res, fileName); //此方法类似上面的方法,区别可自行百度
    } catch (e) {
     console.log(e)
    }
   } else {
    let url = window.URL.createObjectURL(new Blob([res]))
    let link = document.createElement('a')
    link.style.display = 'none'
    link.href = url
    link.setAttribute('download', fileName)// 文件名
    document.body.appendChild(link)
    link.click()
    document.body.removeChild(link) // 下载完成移除元素
    window.URL.revokeObjectURL(url) // 释放掉blob对象
   }
 },
 download(){
   var data = {
    appId:this.appId
   }
   downloadAppAjax(data).then(res => {
     const filename = decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1]);
     console.log(filename)
     this.downloadFile(res.data,filename)
   })
  }

这里的downloadAppAjax调用后台接口,请求数据,获取后台返回的数据没有文件名,最后发现在header Content-Disposition属性里 attachment;filename=app.jpg

所以我们要实现下载自动重命名就需要拿出filename,这里我们使用decodeURI对Content-Disposition属性值进行解码,拿到filename:

decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1]);

拿到文件流和文件名后 接收文件流并创建地址

let url =window.URL.createObjectURL(new Blob([res]))

接着利用a标签进行下载即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js网页实时倒计时精确到秒级
Feb 10 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
Mar 23 Javascript
Vue.js中数据绑定的语法教程
Jun 02 Javascript
JavaScript之map reduce_动力节点Java学院整理
Jun 29 Javascript
ES6中新增的Object.assign()方法详解
Sep 22 Javascript
使用 Vue 绑定单个或多个 Class 名的实例代码
Jan 08 Javascript
Express结合Webpack的全栈自动刷新
May 23 Javascript
vue实现分页栏效果
Jun 28 Javascript
Vue项目打包部署到iis服务器的配置方法
Oct 14 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
Mar 04 Javascript
原生JS实现萤火虫效果
Mar 07 Javascript
js实现移动端轮播图滑动切换
Dec 21 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
Aug 18 #Javascript
JavaScript语句错误throw、try及catch实例解析
Aug 18 #Javascript
JavaScript中交换值的10种方法总结
Aug 18 #Javascript
js+css3实现炫酷时钟
Aug 18 #Javascript
纯js+css实现在线时钟
Aug 18 #Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
Aug 18 #Javascript
js+css实现扇形导航效果
Aug 18 #Javascript
You might like
php中用数组的方法设置cookies
2011/04/21 PHP
php Hex RGB颜色值互换的使用
2013/05/10 PHP
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
2010/04/15 Javascript
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
时间戳转换为时间 年月日时间的JS函数
2013/08/19 Javascript
js自动生成对象的属性示例代码
2013/10/28 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
jQuery 如何先创建、再修改、后添加DOM元素
2014/05/20 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
Python实现二叉搜索树
2016/02/03 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python拼接字符串的7种方法总结
2018/11/01 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
毕业生怎样写好自荐信
2013/11/11 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
收款委托书范本
2014/09/11 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
电子商务实训报告总结
2014/11/05 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
Go 语言下基于Redis分布式锁的实现方式
2021/06/28 Golang