【JS|第27期】网页文件传输:Blob与Base64的对决

日期:2024年9月12日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


文章目录

  • 一、前言
  • 二、二进制Blob传输:速度与效率的代名词
    • 1、概念解析
    • 2、优缺点
      • (1)Blob传输的优势
      • (2)Blob传输的劣势
    • 3、适用场景
    • 4、示例说明
  • 三、Base64编码:兼容性与便捷性的选择
    • 1、概念解析
    • 2、Base64的亮点
      • (1)Base64传输的优点
      • (2)Base64传输的缺点
    • 3、适用场景
    • 4、示例说明
  • 四、结语


在这里插入图片描述


一、前言


在当今 Web 开发中,文件传输是不可或缺的一环。无论是上传用户头像、分享文档,还是处理多媒体内容,高效、安全的文件传输方式都是关键。网页的文件传输有多种方式,包括但不限于 二进制 blob 传输base64传输。本文将深入探讨这两种常见的文件传输技术,解析它们的优缺点、适应场景和使用方法。

二、二进制Blob传输:速度与效率的代名词


1、概念解析

Blob,全称Binary Large Object,是一种用于存储大量二进制数据的对象。在 Web 环境里,Blob 用于封装文件或二进制数据流,如图片或文件内容。

2、优缺点

(1)Blob传输的优势

  • 高效传输:直接传输二进制数据,无额外编码损耗,特别适合大文件。
  • 内存效率:对于大文件传输,Blob 可以利用 FileReaderreadAsArrayBuffer 方法进行流式读取,降低内存占用。
  • 资源消耗低:对于大文件如高清图片、视频,Blob 传输效率高,服务器压力小。
  • 跨源资源共享(CORSBlob 传输支持 CORS,使得跨域文件传输成为可能。

(2)Blob传输的劣势

  • 浏览器兼容性Blob 在一些老旧浏览器版本中可能不受支持,限制了其广泛应用的场景。
  • 传输复杂性:与字符串数据相比,二进制数据的传输和处理通常更为复杂。

3、适用场景

  • 适合大文件传输场景,像传输高清视频、大型压缩文件等。在这些场景下,效率是关键,二进制 Blob 传输能够很好地满足需求。

  • 对于实时性要求高的场景,例如实时音视频流传输,减少编码解码的时间能够有效降低延迟,从而提供更流畅的用户体验。

4、示例说明

在前端,通过 FormData 对象可以轻松封装 Blob 数据,然后通过 fetchXMLHttpRequest 发送到服务器。例如,上传一张图片时:

let file = document.querySelector('input[type="file"]').files[0];
let formData = new FormData();
formData.append('image', file);
fetch('/upload-image', {method: 'POST',body: formData
});

三、Base64编码:兼容性与便捷性的选择


1、概念解析

Base64 是一种将二进制数据转换成文本字符串的编码方式,使得数据可以在不兼容二进制的传输层中安全传输,常见于 URLCookie 或邮件中传输二进制数据。

2、Base64的亮点

(1)Base64传输的优点

  • 广泛兼容:文本格式的特性使其在各种环境中都能良好工作,兼容性极高。
  • 嵌入性Base64 编码的数据可以直接嵌入到 HTMLCSSJSON 等文本格式中。

(2)Base64传输的缺点

  • 数据膨胀Base64 编码会增加原始数据大小的约 33%,增加了网络传输负担,因此传输效率低于 Blob
  • 性能开销:编码和解码过程需要额外的 CPU 资源,影响传输效率。

3、适用场景

  • 对于小文件传输来说比较适用,像一些小图标、简单的文本文件等,Base64 编码后的大小增加并不明显,使用起来很方便。

  • 在嵌入资源方面表现出色,例如在 HTML 中直接嵌入小型图片、字体文件等,这样可以避免额外的文件请求,提高网页的加载速度。

4、示例说明

封装示例:

// 将文件转换为Base64字符串
function fileToBase64(file, callback) {const reader = new FileReader();reader.onloadend = function() {const base64String = reader.result.split(',')[1];callback(base64String);};reader.readAsDataURL(file);
}// 使用Base64字符串
fileToBase64(file, (base64String) => {// 将Base64字符串设置为图片的src属性document.getElementById('image').src = `data:image/png;base64,${base64String}`;
});

调用示例:

fileToBase64(file,function(base64String){fetch('/upload-image', {method: 'POST',body: JSON.stringify({image: base64String}),headers: {'Content-Type': 'application/json'}});
})

四、结语


无论是追求速度与效率的 Blob,还是兼容性与便捷性的 Base64,选择最适合项目需求的方案,才能在 Web 开发的广阔天地中游刃有余。


参考文章:

  • 《VB6玩转Base64数据:编码与解码指南》
  • 《今日头条 Base64编码》

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/141724645

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1536059.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

keil 中 printf重定向

int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart1, (void*)&ch, 1, 1000);return ch;} 同时勾选,使用微库

1.使用 VSCode 过程中的英语积累 - File 菜单(每一次重点积累 5 个单词)

前言 学习可以不局限于传统的书籍和课堂,各种生活的元素也都可以做为我们的学习对象,本文将利用 VSCode 页面上的各种英文元素来做英语的积累,如此做有 3 大利 这些软件在我们工作中是时时刻刻接触的,借此做英语积累再合适不过&a…

p11 日志,元数据,进程的查看

直接运行docker run -d centos这个时候回启动容器,但是因为容器里面没有前台进程所以这个时候docker会把没用的进程给停止掉,可以看到docker ps命令没有查看到任何的正在运行的容器 但是如果说你使用 -it命令进入到了容器里面,这个他就不会…

9.15javaweb项目总结

1.贴吧界面算是完成了基本的 能通过url打开多个贴吧信息的界面了,界面水平不是很高,界面还有待提升,然后该界面的功能点还差点有点远,完成度不是很高。 2.解决了关注的功能问题 要考虑的地方有点多,最简单的就是点击…

DockerLinux安装DockerDocker基础

Linux软件安装 yum命令安装 通过yum命令安装软件,是直接把软件安装到Linux系统中 安装和卸载都比较麻烦,因为软件和系统是强关联的 Docker docker是一种容器技术,可以解决软件和系统强关联关系,使得软件的安装和卸载更方便,它可以将我们的应用以及依赖进行打包,制作出一个镜…

CTF(misc)1和0的故事

题目链接 下载题目后是一堆整齐的01字符串,猜测是生成二维码,将0变成白色方块,1变成黑色方块。 0000000001110010000000000 0000000000011110100000000 0000000001110001000000000 0000000010111100000000000 0000000010101010000000000 00…

分享一个 在线拍卖系统 商品竞拍平台Java、python、php三个技术版本(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

C++11的部分新特性

目录 1.列表初始化 1.1 { } 初始化 1.2 std::initializer_list 2.声明 2.1 auto 2.2 decltype 2.3 nullptr 3. 范围for 4.STL中的一些变化 5.右值引用与移动语义 5.1 左值引用与右值引用 5.2 左值引用与右值引用的比较 5.3 右值引用使用场景 5.4 完美转发 6.新的…

软件设计师——程序设计语言

目录 低级语言和高级语言 编译程序和解释程序 正规式,词法分析的一个工具 有限自动机 ​编辑 上下文无关法 ​编辑 中后缀表示法 杂题 ​编辑 低级语言和高级语言 编译程序和解释程序 计算机只能理解由0、1序列构成的机器语言,因此高级程序设计…

Centos中关闭swap分区,关闭内存交换

概述: Swap 分区是 Linux 系统中扩展物理内存的一种机制。Swap的主要功能是当全部的RAM被占用并需要更多内存时,用磁盘空间代理RAM内存。Swap对虚拟化技术资源损耗非常大,一般虚拟化是不允许开启交换空间的,如果不关闭Swap&…

Framebuffer应用编程

目录 前言 LCD操作原理 涉及的 API 函数 open函数 ioctl 函数 mmap 函数 Framebuffer程序分析 源码 1.打开设备 2.获取LCD参数 3.映射Framebuffer 4.描点函数 5.随便画几个点 上机实验 前言 本文介绍LCD的操作原理和涉及到的API函数,分析Framebuffer…

进阶岛 renwu5: 茴香豆:企业级知识问答工具实践闯关任务

进阶岛 renwu5: 茴香豆:企业级知识问答工具实践闯关任务 renwu: https://kkgithub.com/InternLM/Tutorial/blob/camp3/docs/L2/Huixiangdou/task.md 在 InternStudio 中利用 Internlm2-7b 搭建标准版茴香豆知识助手,并使用 Gradio 界面完成 2 轮问答&a…

讨论人机交互研究中大语言模型的整合与伦理问题

概述 论文地址:https://arxiv.org/pdf/2403.19876.pdf 近年来,大规模语言模型发展迅速。它们给研究和教育领域带来了许多变化。这些模型也是对人机交互(HCI)研究过程的有力补充,可以分析定性和定量数据,再…

架构师:在 Spring Cloud 中实现全局异常处理的技术指南

1、简述 在分布式系统中,微服务架构是最流行的设计模式之一。Spring Cloud 提供了各种工具和库来简化微服务的开发和管理。然而,随着服务的增多,处理每个服务中的异常变得尤为复杂。因此,实现统一的全局异常处理成为了关键。本篇博客将介绍如何在 Spring Cloud 微服务架构…

阿里P8和P9级别有何要求

阿里巴巴的P8和P9级别,代表着公司的资深技术专家或管理者岗位,要求候选人具有丰富的职业经历、深厚的技术能力以及出色的领导力。以下是对P8和P9级别的要求、考察点以及准备建议的详细分析。 P8 级别要求 1. 职业经历: 8年以上的工作经验&a…

idea连接数据库大避雷!!!

再跟着黑马学习的时候,用黑马的资料安装的数据库,命令行能正常启动,SQLyog也能正常连接,就是tmd idea连接不了。不论是原始的jdbc,还是其它方式都不行,一直报错: 然后就各种搜,有的说数据库驱动…

SQLite安装(含安装包)

安装包: 通过百度网盘分享的文件:sqlite-dll-win-x64-3460100.zip 链接:https://pan.baidu.com/s/1852coiq51QcNkeaHdu1Oyg 提取码:v2y6 解压 设置环境变量 验证安装成功 SQLite设置完成

恢弘集团SRM采购数字化项目成功上线,企企通助推新材料企业发展新质生产力

近日,企企通携手恢弘集团有限公司(以下简称“恢弘集团”)打造的一站式数字化采购管理平台正式上线。基于该平台,恢弘集团全流程全周期的数字化采购管理体系进一步升级,在推动企业提高效率的同时,也将形成新…

温习mysql函数 连接查询

字符串 1、CONCAT(S1,S2,...Sn) :字符串拼接,将S1 , S2 , ... Sn 拼接成一个字符串】 2、LOWER(str) :将字符串str全部转为小写 3、UPPER(str) :将字符串str全部转为大写 4、LPAD(str,n,pad): …