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 指导方针
Apr 05 Javascript
js实现图片漂浮效果的方法
Mar 02 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
Dec 02 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
AngularJS动态绑定HTML的方法分析
Nov 07 Javascript
基于javascript的异步编程实例详解
Apr 10 Javascript
在vue中通过axios异步使用echarts的方法
Jan 13 Javascript
centos 上快速搭建ghost博客方法分享
May 23 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
May 10 jQuery
浅谈VUE中演示v-for为什么要加key
Jan 16 Javascript
js中forEach,for in,for of循环的用法示例小结
Mar 14 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 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
Zerg剧情介绍
2020/03/14 星际争霸
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
PHP APC的安装与使用详解
2013/06/13 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
php+mysqli使用预处理技术进行数据库查询的方法
2015/01/28 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
js中confirm实现执行操作前弹出确认框的方法
2014/11/01 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
解析Vue.js中的组件
2018/02/02 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
JavaScript深入V8引擎以及编写优化代码的5个技巧
2019/06/24 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
2019/08/08 Javascript
微信小程序如何连接Java后台
2019/08/08 Javascript
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
Python判断字符串与大小写转换
2015/06/08 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Django框架models使用group by详解
2020/03/11 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
先进典型事迹材料
2014/12/29 职场文书
春节慰问信范文
2015/02/15 职场文书
信息技术课教学反思
2016/02/23 职场文书
52条SQL语句教你性能优化
2021/05/25 MySQL
Django使用redis配置缓存的方法
2021/06/01 Redis