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 以对象为索引的关联数组
May 19 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
Mar 07 Javascript
jQuery应用之jQuery链用法实例
Jan 19 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
Feb 13 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
js, jQuery实现全选、反选功能
Mar 08 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
May 10 Javascript
Angularjs自定义指令Directive详解
May 27 Javascript
基于AngularJS的简单使用详解
Sep 10 Javascript
vue.js 实现点击展开收起动画效果
Jul 07 Javascript
详解微信小程序input标签正则初体验
Aug 18 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 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
mysql时区问题
2008/03/26 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
使用js正则控制input标签只允许输入的值
2013/07/29 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
JavaScript常用小技巧小结
2014/12/29 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
Vue学习笔记进阶篇之多元素及多组件过渡
2017/07/19 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
JavaScript偏函数与柯里化实例详解
2019/03/27 Javascript
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
Python异常学习笔记
2015/02/03 Python
Python字符串处理函数简明总结
2015/04/13 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
在Python中编写数据库模块的教程
2015/04/29 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
学习雷锋精神心得体会范文
2014/03/12 职场文书
《菜园里》教学反思
2014/04/17 职场文书
国家奖学金获奖感言
2014/08/16 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
运动会广播稿100字
2015/08/19 职场文书