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

news2024/9/25 9:40:29

日期: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.coloradmin.cn/o/2138178.html

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

相关文章

【SQL】百题计划:SQL最基本的判断和查询。

[SQL]百题计划 Select product_id from Products where low_fats "Y" and recyclable "Y";

java重点学习-JVM组成

十二 JVM 12.1 JVM运行原理 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行自动内存管理,垃圾回收机制 12.2 什么是程序计数器? 程序计数器:线程私有的(不存在线程安全问题)&…

美团图床设置教程

大厂图床,CDN加速 项目地址:https://github.com/woniu336/mt-img 使用方法 在mt.php填上你的token即可,然后打开index.html上传图片 获取token方法 注册https://czz.meituan.com/发布视频,上传封面,注意在上传封面后…

java项目之企业级工位管理系统源码(springboot)

项目简介 企业级工位管理系统实现了以下功能: 企业级工位管理系统的主要使用者管理员功能有个人中心,部门信息管理,工位信息管理,使用情况管理,工位分配管理。员工可以查看个人中心,部门信息,…

linux第二课(docker的安装使用)

目录 一.关于docker (1)背景引入 (2)docker介绍 (3)功能 (4)Docker架构 二.docker的安装及相关的命令 (1)docker的安装 (2)docker的配置 (3)docker镜像命令 (4)容器命令 三.docker安装myaql ​编辑 四.数据卷挂载 1.数据卷挂载引入 2.数据卷挂载图解 3.数据卷的安装…

通用四期ARM架构银河麒麟桌面操作系统V10【安装、配置FTP服务端】

一、操作环境 服务端:银河麒麟桌面操作系统V10SP1 (服务端包链接:https://download.csdn.net/download/AirIT/89747026) 客户端:银河麒麟桌面操作系统V10SP1 (客户端包链接:https://downloa…

List<Map<String, Object>>汇总统计排序

开发环境&#xff1a;jdk 1.8 需求一&#xff1a; 1、统计每个小时(升序)不同事件的产品产量 2、统计不同事件&#xff08;OK 、NG&#xff09;的总产量 public static void main(String[] args) {//数据源List<Map<String, Object>> list new ArrayList<Map…

微信小程序开发第三课

1 wxml语法 1.1 模版语法 # 1 在页面 xx.js 的 Page() 方法的 data 对象中进行声明定义 # 2 在xx.wxml 中使用 {{}} 包裹&#xff0c;显示数据 # 3 可以显示如下&#xff0c;不能编写js语句或js方法-变量-算数运算-三元运算-逻辑判断# 4 只是单纯通过赋值&#xff0c;js中…

[Python学习日记-22] Python 中的字符编码(下)

[Python学习日记-22] Python 中的字符编码&#xff08;下&#xff09; 简介 编码的战国时代 Unicode 和 UTF 现代计算机系统通用的字符编码工作方式 简介 在[Python学习日记-21] Python 中的字符编码&#xff08;上&#xff09;中我们讲了字符编码中的 ASCII 码和 GB2312/G…

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组、1143. 最长公共子序列

300. 最长递增子序列 1.dp定义&#xff1a;dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&#xff0c;而是我们要取dp[j] 1的最大值…

【前端】ref引用的作用

首先&#xff0c;我们要明确一点&#xff0c;使用vue的好处是&#xff1a; 想要减少开发者直接操作dom元素。使用组件模版&#xff0c;实现代码的服用。 ref的属性的实现是为了取代原生js中使用id、class等标识来获取dom元素。 helloworld组件 <template><div clas…

memset函数的使用

目录 1.头文件 2.memset函数讲解 小心&#xff01;VS2022不可直接接触&#xff0c;否则&#xff01;没这个必要&#xff0c;方源面色淡然一把抓住&#xff01;顷刻炼化&#xff01; 1.头文件 memset函数的使用需要包括头文件 #include<string.h> 2.memset函数讲解 简述…

Java--图书管理系统(新版详细讲解)

前言&#xff1a; 对于初学者&#xff0c;自己写一个图书管理系统&#xff0c;会有效提高自己的代码能力&#xff0c;加深对Java中面向对象的理解&#xff0c;里面蕴含了Java中的类、接口、继承、多态等思想&#xff0c;接下来我们一起完成这一份"伟大的作品!" 注&am…

【若依RuoYi-Vue | 项目实战】帝可得后台管理系统(一)

文章目录 一、项目背景介绍1、什么是帝可得&#xff1f;2、物联网3、售货机术语4、角色与功能5、业务流程&#xff08;1&#xff09;平台管理员&#xff08;2&#xff09;运维人员&#xff08;3&#xff09;运营人员&#xff08;4&#xff09;消费者 6、产品原型7、库表设计 二…

基于Web的《药谷奇遇记》网站设计与实现---附源码72940

目 录 1 绪论 1.1 研究背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系统用例分析 2.4 系统流程…

18062 二维数组每行中的最大值

### 思路 1. 使用指针变量遍历二维数组的每一行。 2. 对于每一行&#xff0c;找到该行的最大值。 3. 输出每一行的最大值。 ### 伪代码 1. 定义一个指向二维数组的指针变量 p。 2. 遍历二维数组的每一行&#xff1a; - 将 p 指向当前行。 - 初始化 max 为当前行的第一个…

【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载

基于STM32设计的SD卡数据读取与上位机显示系统 演示视频&#xff1a; 基于STM32设计的SD卡数据读取与上位机显示系统 简介&#xff1a;本研究的主要目的是基于STM32F103微控制器&#xff0c;设计一个能够读取SD卡数据并显示到上位机的系统。SD卡的数据扇区读取不仅是为了验证存…

利用AI增强现实开发:基于CoreML的深度学习图像场景识别实战教程

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

STL值list

list容器 头文件&#xff1a;#include<list> - list是一个双向链表容器&#xff0c;可高效地进行插入删除元素 - list不可以随机存取元素&#xff0c;所以不支持at.(pos)函数与[]操作符 注&#xff1a;list使用迭代器访问数据时可以一步一步走自增自减&#xff08;即…

誉龙视音频综合管理平台 RelMedia/FindById SQL注入漏洞复现

0x01 产品简介 誉龙视音频综合管理平台是深圳誉龙数字技术有限公司基于多年的技术沉淀和项目经验,自主研发的集视音频记录、传输、管理于一体的综合解决方案。该平台支持国产化操作系统和Windows操作系统,能够接入多种类型的记录仪,实现高清实时图传、双向语音对讲、AI应用…