当前位置: 首页 > news >正文

前端获取blob文件格式的两种格式

第一种,后台传递给前台是base64格式的JSON数据

这时候前台拿到base64格式的数据可以通过内置的atob解码方法结合new Uint8Arraynew Blob方法转换成blob类型的数据格式,然后可以使用blob数据格式进行操作,虽然base64转换成blob要经过很多步骤,但幸运的是这些步骤都是固定的,因此可以写成一个公共的函数

function base64ToBlob(base64) {let decoded = atob(base64);return new Blob([new Uint8Array(decoded.split("").map((char) => char.charCodeAt(0)))],{ type: "application/octet-stream" });}

示例:

<script>let btn2 = document.querySelector(".btn2");btn2.addEventListener("click", function () {axios.get("http://127.0.0.1:3001/blob").then((res) => {console.log(res.data.data);let base64Data = res.data.data;let decoded = atob(base64Data);let imageBlob = new Blob([new Uint8Array(decoded.split("").map((char) => char.charCodeAt(0)))],{ type: "application/octet-stream" });console.log("imageBlob", imageBlob);let url = URL.createObjectURL(imageBlob);let img = document.createElement("img");img.src = url;document.body.appendChild(img);});});
</script>

第二种,后台传递给前台的直接是二进制数据

注意,这里传递的需要直接是二进制数据才行,不能是JSON数据.

像nodejs中直接将读取到的Excel二进制数据返回,不要返回一个JSON.因为这要跟前台的axios请求进行配合.

fs.readFile(path.resolve(__dirname, "../resource/test.xlsx"), (err, data) => {if (err) {res.status(500).send(err);return;} else {res.send(data);}});

前台使用axios的添加一个参数responseType: "blob",这样可以直接拿到一个blob类型的数据.

let btn2 = document.querySelector(".btn2");
btn2.addEventListener("click", function () {axios({url: "http://127.0.0.1:3001/blob",method: "get",responseType: "blob",}).then((res) => {let blob = res.data;let url = URL.createObjectURL(blob);let img = document.createElement("img");img.src = url;document.body.appendChild(img);});

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Qt】QLCDNumber和QProgressBar
  • 基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
  • JRT多列唯一取数据黑科技
  • Golang学习笔记20240725,Go语言基础语法
  • kafka rocketmq rabbitmq相同差异点
  • AI学习指南机器学习篇-SOM在数据聚类和可视化中的应用
  • Maven 的模块化开发示例
  • Spring循环依赖详解
  • MacOS解决安装pycurl的问题 no such file or directory: ‘/usr/lib/libcurl.@libext@‘
  • 基于DPU与SmartNic的云原生SDN解决方案
  • springboot 之 使用easyexcel导出数据到多个sheet,动态表头,自动计算列宽
  • Docker核心技术:Docker原理之Cgroups
  • 全年销售7亿块,巧克力企业如何通过相邻业务打造极致产品力?
  • LCD 横屏切换为竖屏-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板
  • 初阶数据结构之栈和队列
  • Android优雅地处理按钮重复点击
  • codis proxy处理流程
  • C学习-枚举(九)
  • gcc介绍及安装
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • PHP的Ev教程三(Periodic watcher)
  • Python_OOP
  • SQL 难点解决:记录的引用
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 蓝海存储开关机注意事项总结
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 日剧·日综资源集合(建议收藏)
  • 王永庆:技术创新改变教育未来
  • 无服务器化是企业 IT 架构的未来吗?
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • (2)STM32单片机上位机
  • (Python) SOAP Web Service (HTTP POST)
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)激光线扫描-三维重建
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (算法)Travel Information Center
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .gitignore文件使用
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET MVC第三章、三种传值方式
  • .Net Remoting常用部署结构
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .NET上SQLite的连接
  • @Bean有哪些属性
  • @Transactional事务注解内含乾坤?
  • [04]Web前端进阶—JS伪数组
  • [383] 赎金信 js