Vue利用Blob下载原生二进制数组文件


Posted in Javascript onSeptember 25, 2019

本文实例为大家分享了Vue利用Blob下载原生二进制数组文件的具体代码,供大家参考,具体内容如下

在服务端推送过来的二进制数组(JSON格式),在前端要处理成JS原生数组以后才能做成Blob,有两个地方要注意(详细注释),代码如下:

Vue.prototype.$downloadFile = (filename, data) => {
 if (!data) return;
 let arr8 = Uint8Array.from(data); //!!!注意1:应根据数据的类型选择适当的JS原生数组类型进行转换,也就是说服务端推送的byte型数组还是int型数组等。
 //定义文件内容,类型必须为Blob 否则createObjectURL会报错
 let blob = null;
 let type = 'application/octet-binary';
 if (typeof (window.Blob) == "function") {
  blob = new Blob([arr8], {//!!!注意2:数组两边必须加上[]
   type: type
  });
 } else {
  let BlobBuilder = window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder;
  let bb = new BlobBuilder();
  bb.append([arr8]);
  blob = bb.getBlob(type);
 }
 let URL = window.URL || window.webkitURL;
 let bloburl = URL.createObjectURL(blob);
 let anchor = document.createElement("a");
 if ('download' in anchor) {
  anchor.style.visibility = "hidden";
  anchor.href = bloburl;
  anchor.download = filename;
  document.body.appendChild(anchor);
  let evt = document.createEvent("MouseEvents");
  evt.initEvent("click", true, true);
  anchor.dispatchEvent(evt);
  document.body.removeChild(anchor);
 } else if (navigator.msSaveBlob) {
  navigator.msSaveBlob(blob, filename);
 } else {
  location.href = bloburl;
 } //移除链接释放资源
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
我见过最全的个人js加解密功能页面
Dec 12 Javascript
Javascript 面向对象 继承
May 13 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
Javascript实现返回上一页面并刷新的小例子
Dec 11 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
Oct 23 Javascript
JavaScript中利用jQuery绑定事件的几种方式小结
Mar 06 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
Jun 06 Javascript
angular.js分页代码的实例
Jul 27 Javascript
Vue方法与事件处理器详解
Dec 01 Javascript
JS表格组件神器bootstrap table使用指南详解
Apr 12 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
JavaScript学习笔记之DOM基础操作实例小结
Jan 09 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
Sep 25 #Javascript
layui添加动态菜单与选项卡 AJAX请求的例子
Sep 25 #Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
Sep 25 #Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
Sep 25 #Javascript
vue+axios实现post文件下载
Sep 25 #Javascript
vue + axios get下载文件功能
Sep 25 #Javascript
layer.open组件获取弹出层页面变量、函数的实例
Sep 25 #Javascript
You might like
十天学会php之第三天
2006/10/09 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
php建立Ftp连接的方法
2015/03/07 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
AngularJS教程之MVC体系结构详解
2016/08/16 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
2017/12/24 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
python赋值操作方法分享
2013/03/23 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
ubuntu 18.04 安装opencv3.4.5的教程(图解)
2019/11/04 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
高中生自我评价个人范文
2013/11/09 职场文书
军训自我鉴定范文
2014/02/13 职场文书
个人自我剖析材料
2014/09/30 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
2015双创工作总结
2015/07/24 职场文书
迎国庆主题班会
2015/08/17 职场文书