深入浅出JavaScript中base64编码原理

yizhihongxing

深入浅出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日

相关文章

  • JS正则表达式修饰符global(/g)用法分析

    JS正则表达式修饰符global(/g)用法分析 什么是正则表达式修饰符global? 正则表达式(Global)是JS中的一个特殊对象,用于在字符串中匹配某个模式。Global修饰符被用来指定正则表达式对象应该匹配所有符合条件的字符串,而不是第一次匹配后就停止查找。Global修饰符以”/g”表示。 如何使用global修饰符 我们可以使用RegExp对象…

    JavaScript 2023年6月10日
    00
  • Element的el-tree控件后台数据结构的生成以及方法的抽取

    生成后台数据结构: 首先,我们需要明确el-tree控件所需要的数据格式,它要求数据使用树形结构进行展示,每一项数据包含以下属性: label:节点描述 children:子节点数据,是一个数组,也可以为空 接着,我们需要对后台的原始数据进行格式化处理,使其可以被el-tree控件所展示。常见的处理方式是使用递归的方式将原始数据转换为树形结构,具体过程如下:…

    JavaScript 2023年6月10日
    00
  • localStorage设置有效期和过期时间的简单方法

    下面是详细讲解 “localStorage设置有效期和过期时间的简单方法” 的完整攻略: 什么是localStorage? localStorage 是一种在浏览器中存储数据的方式,可以用于在不同页面和不同会话之间共享数据。localStorage 中存储的数据可以长期保存,即使浏览器关闭了也不会丢失。 设置localStorage的有效期 localSto…

    JavaScript 2023年6月10日
    00
  • 使用javascript实现有效时间的控制,并显示将要过期的时间

    使用JavaScript实现有效时间的控制可以采用以下步骤: 1.创建一个Date对象来获取当前时间。如下所示: const now = new Date(); 2.通过加上有效时间的毫秒数(比如一小时的有效时间为3600000毫秒)来计算出存储到cookie或localstorage中的过期时间。如下所示: const expirationTime = n…

    JavaScript 2023年5月27日
    00
  • JavaScript常用字符串与数组扩展函数小结

    JavaScript是一门强大的语言,它提供了大量的内置函数,其中包括对字符串和数组的操作。除此之外,还有很多扩展函数可以用于处理字符串和数组。 本文将对常用的JavaScript字符串和数组扩展函数做一个小结。 JavaScript字符串扩展函数 1. startsWith() startsWith()方法用于判断一个字符串是否以指定的字符串开头。如果是,…

    JavaScript 2023年5月27日
    00
  • 关于js的三种使用方式(行内js、内部js、外部js)的程序代码

    关于JS的三种使用方式包括行内JS、内部JS和外部JS。其中行内JS是指直接在HTML元素的属性中使用JS代码;内部JS是指将JS代码嵌入到HTML文件中的<script>标签内;外部JS是指将JS代码编写在一个单独的文件中并通过<script>标签引入HTML文件中。 行内JS 以<button>标签的onclick属性…

    JavaScript 2023年5月27日
    00
  • 动态加载JavaScript文件的3种方式

    当我们开发一个网站时,经常需要用到Javascript代码来处理交互逻辑和动态效果。通常,为了让代码更清晰、易于维护,我们会将Javascript代码分离到一个或多个独立的文件中。这时就需要用到动态加载Javascript文件的功能。下面介绍3种常用的方式: 1. 通过DOM创建script元素 动态加载Javascript文件最常用的方式就是通过DOM创建…

    JavaScript 2023年5月27日
    00
  • 什么是DOM(Document Object Model)文档对象模型

    DOM (Document Object Model,文档对象模型)是一种表示 HTML 和 XML 文档的标准程序接口。通过使用 DOM,可以访问和操作一个文档中的内容。DOM 描述了一个层次化的节点树,允许开发人员添加、修改或删除文档中的任意部分。 DOM 模型分为三个部分:文档结构模型(Document),元素对象模型(Element)和特性对象模型(…

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