赞
踩
前两天项目中有个小需求:前端下载后台小哥返回的二进制流文件。
起初接到这个需求时,我感觉这很简单啊(虽然我不会,但可以百度啊,,,,)
然后就写出了如下的代码:
let blob = new Blob([res.data]);let fileName = `Cosen.csv`;if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveBlob(blob, fileName);} else { let link = document.createElement("a"); let evt = document.createEvent("HTMLEvents"); evt.initEvent("click", false, false); link.href = URL.createObjectURL(blob); link.download = fileName; link.style.display = "none"; document.body.appendChild(link); link.click(); window.URL.revokeObjectURL(link.href);}
这一段代码,我大概强行解释一下:
首先判断window.navigator.msSaveOrOpenBlob
是为了兼容IE
(谁要兼容这 xxIE
!!)
然后非IE
的通过URL.createObjectURL()
将Blob
(Blob
是啥?不知道?没关系,我下面会具体装逼讲解的)构建为一个object URL
对象、指定文件名&文件类型、创建a
链接模拟点击实现下载,最后通过URL.revokeObjectURL
释放创建的对象。
功能虽然实现了,但其实我是似懂非懂的~
没过几天,产品又给我提了一个需求:图片裁剪上传及预览。
虽然听过类似的需求,但自己手写还真的没写过,然后我就开始了网上冲浪时光(各种搜索,,,)。但这次,没有想象中那么简单了~~
网上看到的都是诸如FileReader
、canvas
、ArrayBuffer
、FormData
、Blob
这些名词。我彻底懵了,这些平时都只是听过啊,用的也不多啊。经过了一番学习,我发现这些都属于前端二进制的知识范畴,所以在搞业务前,我准备先把涉及到的前端二进制梳理一遍,正所谓:底层基础决定上层建筑嘛
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。