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使Div居中并随网页大小改变而改变
Jun 24 Javascript
JS常见问题整理(持续更新)
Aug 06 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
May 25 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
基于Require.js使用方法(总结)
Oct 26 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
Dec 16 Javascript
vue.js单文件组件中非父子组件的传值实例
Sep 13 Javascript
VUE引入第三方js包及调用方法讲解
Mar 01 Javascript
JS实现骰子3D旋转效果
Oct 24 Javascript
Vue在chrome44偶现点击子元素事件无法冒泡的解决方法
Dec 15 Javascript
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
利用php操作memcache缓存的基础方法示例
2017/08/02 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
PHP asXML()函数讲解
2019/02/03 PHP
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
浅谈js 闭包引起的内存泄露问题
2015/06/22 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
2015/10/23 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
python中定义结构体的方法
2013/03/04 Python
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
Python3中函数参数传递方式实例详解
2019/05/05 Python
python向图片里添加文字
2019/11/26 Python
Pytorch环境搭建与基本语法
2020/06/03 Python
如何选择使用结构还是类
2014/05/30 面试题
大学生新闻专业个人自我评价
2013/11/12 职场文书
生物科学专业个人求职信范文
2013/12/07 职场文书
打架检讨书300字
2014/02/02 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
机动车交通事故协议书
2015/01/29 职场文书
小区保洁员岗位职责
2015/04/10 职场文书
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL
springboot中一些比较常用的注解总结
2021/06/11 Java/Android