深入浅出JavaScript中base64编码原理

深入浅出JavaScript中base64编码原理

什么是base64编码

Base64是一种用于将二进制数据转换成ASCII字符的编码方式。它使用64个字符表示64个不同的二进制数字,每个字符表示6个二进制位,因此每3个字节需要进行编码,得到4个字符。这种编码方式常用于电子邮件和HTTP协议传输数据,因为它可以处理非文本数据。

base64编码原理

在JavaScript中,将字符串转换为base64编码有两个核心方法:btoa()atob()btoa()方法用于将二进制数据编码为ASCII字符串,atob()方法用于将ASCII字符串解码为二进制数据。

btoa()方法

该方法接受一个字符串作为参数,返回一个base64编码的字符串。下面是一个简单的示例:

const originStr = "Hello, World!"; // 原始字符串

const base64Str = btoa(originStr); // 编码后的base64字符串

console.log(base64Str); // 输出:SGVsbG8sIFdvcmxkIQ==

在上面的示例中,我们将原始字符串“Hello, World!”通过btoa()方法进行编码,得到了编码后的字符串“SGVsbG8sIFdvcmxkIQ==”。

atob()方法

该方法接受一个base64编码的字符串作为参数,返回一个解码后的二进制数据。下面是一个简单的示例:

const base64Str = "SGVsbG8sIFdvcmxkIQ=="; // base64字符串

const originStr = atob(base64Str); // 解码后的原始字符串

console.log(originStr); // 输出:Hello, World!

在上面的示例中,我们将编码后的字符串“SGVsbG8sIFdvcmxkIQ==”通过atob()方法进行解码,得到了原始字符串“Hello, World!”。

使用案例

案例一:将图片转换为base64编码

将图片转换为base64编码可以在网页上直接显示图片,而不需要额外的请求。下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>将图片转换为base64编码</title>
  </head>
  <body>
    <img
      src="https://picsum.photos/id/100/500/300"
      alt="一张图片"
      id="img1"
    />

    <script>
      const imgElem = document.getElementById("img1"); // 获取img元素

      const imgSrc = imgElem.src; // 获取图片路径

      const imgBase64 = await getImageBase64(imgSrc); // 获取图片的base64编码

      console.log(imgBase64); // 输出图片的base64编码

      // 获取图片的base64编码
      function getImageBase64(imgSrc) {
        return new Promise((resolve, reject) => {
          const img = new Image();

          img.setAttribute("crossOrigin", "Anonymous"); // 设置图片跨域

          img.onload = function() {
            const canvas = document.createElement("canvas");

            canvas.width = img.width;
            canvas.height = img.height;

            const ctx = canvas.getContext("2d");

            ctx.drawImage(img, 0, 0, img.width, img.height);

            const dataURL = canvas.toDataURL("image/png");

            resolve(dataURL);

            canvas = null;
          };

          img.src = imgSrc;
        });
      }
    </script>
  </body>
</html>

在上面的示例中,我们使用getImageBase64()函数获取图片的base64编码,并将其输出到控制台中。

案例二:使用base64编码传输二进制数据

在客户端和服务器之间传输二进制数据时,可以将二进制数据进行base64编码,然后通过HTTP协议传输,这样可以避免二进制数据被破坏。

以下是一个简单的示例:

// 客户端发送数据
const data = new Uint8Array([1, 2, 3, 4, 5]); // Uint8Array类型的二进制数据

const base64Data = btoa(String.fromCharCode(...data)); // 将二进制数据转换为base64编码

fetch('/upload', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    data: base64Data
  })
});

// 服务器接收数据
router.post('/upload', async (ctx) => {
  const { data } = JSON.parse(ctx.request.body);

  const binaryData = atob(data).split('').map((char) => char.charCodeAt(0)); // 将base64编码的字符串解码为二进制数据

  const arrayBuffer = new Uint8Array(binaryData).buffer; // ArrayBuffer类型的二进制数据

  // 处理二进制数据

  ctx.body = 'success';
});

在上面的示例中,我们将客户端发送的二进制数据通过base64编码方式进行传输,并在服务器端解码,得到原始的二进制数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入浅出JavaScript中base64编码原理 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 2019年百度前端工程师面试题(附答案)

    关于 “2019年百度前端工程师面试题(附答案)” 的完整攻略,我会从以下几个方面进行讲解: 答题技巧 题目分类 示例讲解 1. 答题技巧 首先,我们需要了解一些答题技巧,来帮助我们更好地回答面试题。 首先,阅读题目时一定要仔细,理解清楚题目要求和限制。 其次,如果遇到复杂的题目或者不理解的概念,不要惊慌,可以先思考一下如何简化问题,或者查看相关的资料。 除…

    JavaScript 2023年5月19日
    00
  • js 自带的sort() 方法全面了解

    JS自带的sort()方法全面了解 在JS中,sort()方法是对数组元素进行排序的内置方法。它可以帮助我们轻松地将数组按照一定的顺序进行排序。在这里,我们将详细讲解sort()方法的使用,包括语法、参数、返回值、排序顺序等。 语法 sort()方法的基本语法如下: array.sort(compareFunction); 其中,array 表示要排序的数组…

    JavaScript 2023年5月19日
    00
  • JS数字千分位格式化实现方法总结

    接下来我将为大家详细讲解“JS数字千分位格式化实现方法总结”的完整攻略。 JS数字千分位格式化实现方法总结 在开发过程中,经常会遇到需要对数字进行千分位格式化的要求。下面是两种实现方法的总结。 方法一:正则表达式实现 正则表达式是一种能够匹配字符串的强有力的工具,我们可以通过正则表达式实现数字千分位格式化。下面是示例代码: /** * 将数字格式化为千分位格…

    JavaScript 2023年5月28日
    00
  • JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)

    JavaScript是一种广泛使用的编程语言,Web开发中使用JavaScript将会发挥重要作用。而输出信息是开发中的一个重要部分,下面将对JavaScript中输出信息的三种方法进行详细讲解: 信息确认框 信息确认框是在需要用户进行确认或者操作之前给予用户的提示窗口。JavaScript提供了一个窗口对象来进行交互,该对象中的confirm方法可以用于生…

    JavaScript 2023年5月28日
    00
  • JavaScript高级程序设计(第3版)学习笔记9 js函数(下)

    《JavaScript高级程序设计(第3版)学习笔记9 js函数(下)》一文主要讲解了 JavaScript 中函数的进阶应用,包括函数作为对象、闭包、函数自执行等内容,下面是具体的攻略: 1. 函数作为对象 在 JavaScript 中,函数同时也是对象,因此它们可以拥有属性和方法。函数的属性通常是直接在函数对象上定义,而方法则是定义在函数的原型对象上。 …

    JavaScript 2023年5月18日
    00
  • 基于javascript中的typeof和类型判断(详解)

    基于Javascript中的typeof和类型判断(详解) typeof typeof 运算符可以用来判断一个变量的数据类型,语法如下: typeof operand 其中 operand 是需要判断的变量或值。typeof 运算符会返回以下几种类型的字符串值: “undefined”:如果 operand 未定义或未声明 “boolean”:如果 oper…

    JavaScript 2023年5月19日
    00
  • 如何通过JS实现转码与解码

    下面是如何通过JS实现转码与解码的完整攻略: 一、什么是转码与解码? 在计算机领域,转码与解码是非常重要的概念。转码是将一种编码方式的数据转换为另一种编码方式的数据,而解码则是将编码后的数据转换为原始数据。在日常编程中,常常会用到转码与解码,比如在处理网络传输、数据存储、文本处理等方面。 二、在JS中如何进行转码与解码? 在JS中,可以通过内置的一些方法来实…

    JavaScript 2023年5月20日
    00
  • 用window.onerror捕获并上报Js错误的方法

    下面是完整攻略: 什么是window.onerror? window.onerror是JavaScript的全局错误事件,它会在页面中出现JavaScript错误时触发。 为什么要用window.onerror? 使用window.onerror可以捕获和上报所发生的JavaScript错误,有助于我们及时了解并修复代码中的问题,提高网站的稳定性和用户体验。…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部