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 相关文章推荐
JavaScript中的对象化编程
Jan 16 Javascript
javascript管中窥豹 形参与实参浅析
Dec 17 Javascript
javascript中AJAX用法实例分析
Jan 30 Javascript
JS实现的数组全排列输出算法
Mar 19 Javascript
Backbone.js的Hello World程序实例
Jun 19 Javascript
js代码实现点击按钮出现60秒倒计时
Jan 28 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 Javascript
jQuery使用正则表达式限制文本框只能输入数字
Jun 18 Javascript
Vue项目添加动态浏览器头部title的方法
Jul 11 Javascript
JavaScript简单实现的仿微博留言功能示例
Jan 17 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
详解JavaScript自定义函数
Jul 29 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
第四节--构造函数和析构函数
2006/11/16 PHP
浅谈php提交form表单
2015/07/01 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
原生js实现半透明遮罩层效果具体代码
2013/06/06 Javascript
向左滚动文字 js代码效果
2013/08/17 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
详解参数传递四种形式
2015/07/21 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
关于Python中异常(Exception)的汇总
2017/01/18 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
Python类中self参数用法详解
2020/02/13 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
利用html5 canvas破解简单验证码及getImageData接口应用
2013/01/25 HTML / CSS
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
应届生英语教师求职信
2013/11/05 职场文书
高二历史教学反思
2014/01/25 职场文书
单位承诺书格式
2014/05/21 职场文书
超市客服工作职责
2014/06/11 职场文书
超市创业计划书
2014/09/15 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
政审证明材料
2015/06/19 职场文书
2019感恩宣传标语!
2019/07/05 职场文书