问题

当需要下载已经上传的文件时,后端太烂不愿意做,就只传了base64,然后丢给我们,这时候应该怎么办,这里有两个解决方法
1、打一顿就好了
2、老实自己写吧...

解决

1、先吧base64转换为File
通常base64的格式是 data:image/jpeg;base64,iVBORw0KGgoAAAANSU·······
前半截的 粉色部分是不需要的 包括逗号 ,后半截的才能转成File

const convertFile = base64 => {let fileArray = base64.split(','),// 过滤出文件类型fileType = fileArray[0].match(/:(.*?);/)[1],// atob 是对经过 base-64 编码的字符串进行解码bstr = atob(fileArray[1]),n = bstr.length,//Uint8Array 数组类型表示一个 8 位无符号整型数组u8arr = new Uint8Array(n)while (n--) {// 返回字符串n个字符的 Unicode 编码u8arr[n] = bstr.charCodeAt(n)}// return new Blob([u8arr], { type: fileType })return new File([u8arr], '文件名', { type: fileType })
}

Blob和File 差不多  看自己需要
至此已经成功转换,当然想要下载还没有完成

2、这个时候我们就可以通过 a 标签的特性来进行下文件

const buttonClick = (base64) => {//拿到转码后的 file 格式let file = dataURLtoFile(base64)// 动态创建 a 标签const node = document.createElement('a')// 静态方法会创建一个 DOMStringnode.href = URL.createObjectURL(file)// 下载的文件名node.download = file.name// 模拟点击下载node.click()// 释放刚刚创建的 DOMStringURL.revokeObjectURL(node.href)//这里我吧它插入到了 body 里因为不查vue里面会报错,说子节点中不存在document.body.appendChild(node)// 删除 a 标签document.body.removeChild(node)
}

好了,完成,CV不容易呐,说实话 u8arr = new Uint8Array(n) 和 while 这里我还是不太清楚这含义,有无大佬给小弟讲解一下,‘ 肾 ’是感谢!

Base64 转 File (附下载)相关推荐

  1. CTF常用脚本工具(附下载地址)

    该项目主要记录CTF中用到的工具 Base base64解码输出字节文本 base64隐写加密与解密 base64连续解码 Base64扩展 base64字符替换表 B64-B32-B16解密 b16 ...

  2. Rust 在这个领域要大放异彩:一本新书推荐(附下载)

    以下内容来源于逆锋起笔,关注每日干货及时送达 据说学 Rust 的人中,有不少是前端的,主要是很多前端工具链采用 Rust 重写.不仅如此,终端命令工具,也有很多 Rust 的轮子.所以,学学 Rus ...

  3. 文件格式相互转换(base64转File等)

    前言:若项目中附件上传组件只能拿到文件的base64编码,而后台要的是File对象,在没办法使用其他上传组件的情况下,可以在拿到base64编码后转换成后台需要的格式. 附:图片转BASE64编码工具 ...

  4. 图片base64,file,blob格式的相互转换,以及gif转base64

    图片base64,file,blob格式的相互转换,以及gif转base64(第六点) 1.new Image()图片链接转base64 只能转化为普通的jpg/png图片.无法转化gif图 type ...

  5. 将图片(路径)转换为Base64 和 将base64转换为file类型

    var image={/* 将图片(路径)转换为Base64 */getBase64FromImageURL(url, callback) {var canvas = document.createE ...

  6. 【强烈推荐】国土档案管理信息系统产品使用说明书系列目录【附下载地址】...

    <<国土档案管理信息系统>> 产品使用说明书系列目录 [附下载地址] --通过知识共享树立个人品牌. <国土档案管理信息系统>在线视频讲解 一.记大型商业软件< ...

  7. 销量过亿的《剑指0ffer》题目和答案电子书 (附下载)

    如果有人问面试前该看哪些题,有什么书籍可以推荐,那么<剑指offer>一定必读不可,这本书书豆瓣评分高达 9.0 ,非常适合集中时间阅读.电子书下载 1.扫码关注「顶级架构师」订阅号 2. ...

  8. R语言使用download.file函数下载网络文件到本地(Download File from the Internet)

    R语言使用download.file函数下载网络文件到本地(Download File from the Internet) 目录 R语言使用download.file函数下载网络文件到本地(Down ...

  9. 干货 | 吴恩达亲自为这份深度学习专项课程精炼图笔记点了赞!(附下载)

    来源:机器之心.AI有道 本文约7500字,建议阅读10+分钟. 本文整理了深度学习基础.卷积网络和循环网络的学习笔记,附下载哦~ [ 导读 ]吴恩达在推特上展示了一份由 TessFerrandez ...

最新文章

  1. Discrete Fourier Transform离散傅里叶变换算法
  2. 【若依(ruoyi)】向DAO中传递动态参数
  3. python 链表推导式_五--python之数据结构(Data Structures)
  4. 理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos
  5. python按字节读取_Python read函数按字节(字符)读取文件的实现
  6. 2022最新Spring相关大厂常问技术面试题大全 —— 金三银四好时机
  7. linux 硬盘繁忙,icinga2 借助check_iostat.sh抓取linux服务器的diskIO(硬盘繁忙度)
  8. 顺丰同城:香港IPO发行价定为16.42港元
  9. airpods pro是按压还是触摸_AirPods Pro入手开箱 稍后补充使用感受
  10. Docker镜像下载加速的两种方法
  11. navicat 执行sql文件
  12. 云存储解决方案-阿里云OSS
  13. 台式计算机usb口不能用,电脑usb接口没反应是什么原因?电脑usb接口没反应解决方法...
  14. Python 读文件并按十六进制输出
  15. getcwd()函数的用法
  16. TKK: 更新 TKK 失败,请检查网络连接,推荐其他
  17. 谷歌离线版下载及vs中添加谷歌浏览器(启动项目用谷歌浏览)
  18. 2021年美容师(中级)考试资料及美容师(中级)新版试题
  19. 交叉熵误差(cross entropy error)
  20. centos7 安装jdk1.8 并配置环境变量

热门文章

  1. 电商淘宝用户行为分析
  2. 用户画像标签维度_用户画像标签 数据挖掘系列:用户头像的用户标签
  3. visdom配置安装
  4. Excel2016 逗号分隔一段数据
  5. 新版matlab newff,[转载]新版Matlab中神经网络训练函数Newff的使用方法
  6. 专科计算机考研学校,2019计算机考研指南:专科可以考研吗?
  7. 英特尔NUC 11板载USB3.0座子接口定义
  8. 类似QQ的好友移动功能
  9. 跨主机网络-UDP解析
  10. 对几种常见贷款进行数据分析