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 相关文章推荐
jquery.post用法示例代码
Jan 03 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
Feb 14 Javascript
微信小程序 绘图之饼图实现
Oct 24 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
Vue 2.x教程之基础API
Mar 06 Javascript
微信小程序 跳转传参数与传对象详解及实例代码
Mar 14 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
Jun 17 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
Dec 12 Javascript
JS简单实现动态添加HTML标记的方法示例
Apr 08 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 Javascript
如何使用vue3打造一个物料库
May 08 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
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php传值和传引用的区别点总结
2019/11/19 PHP
javascript 遍历验证所有文本框的值
2009/08/27 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
微信小程序 picker 组件详解及简单实例
2017/01/10 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
d3绘制基本的柱形图的实现代码
2018/12/12 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
jquery实现二级导航下拉菜单效果实例
2019/05/14 jQuery
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
纯css3实现的竖形无限级导航
2014/12/10 HTML / CSS
RetroStage德国:复古服装
2019/02/03 全球购物
c语言常见笔试题总结
2016/09/05 面试题
2014两会学习心得:时代的发展
2014/03/17 职场文书
中学清明节活动总结
2014/07/04 职场文书
故宫导游词
2015/01/31 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
MySQL开启事务的方式
2021/06/26 MySQL
关于vue-router-link选择样式设置
2022/04/30 Vue.js