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

相关文章

  • javacript获取当前屏幕大小

    获取当前屏幕大小可以通过JavaScript的内置对象window来实现。使用window对象提供的属性和方法可以获取浏览器窗口的相关信息。 方法一:使用innerWidth和innerHeight属性获取屏幕大小 window.innerWidth属性返回浏览器窗口的视口宽度,即不包括滚动条的宽度。window.innerHeight属性返回浏览器窗口的视…

    JavaScript 2023年6月11日
    00
  • 详解Javascript百度地图接口开发文档中的类和方法

    下面我将详细讲解百度地图API开发文档中的部分类和方法。 常用类 Map类 地图类,用于在页面上展示地图。可以设置地图的初始中心点、缩放级别等信息。常用方法包括: centerAndZoom(center: Point, zoom: number):设置地图的中心点和缩放级别。 addOverlay(overlay: Overlay):向地图上添加叠加层(如…

    JavaScript 2023年6月11日
    00
  • JavaScript闭包原理及作用详解

    下面我将为您详细讲解JavaScript闭包的原理及作用。 什么是JavaScript闭包? JavaScript闭包指的是在函数内部创建外部无法访问的内部函数,并将内部函数作为返回值返回的情景。闭包由两个部分组成:内部函数和外部函数。内部函数可以访问外部函数的变量和参数,而外部函数无法访问内部函数的变量和参数。 JavaScript闭包的原理是什么? 当函…

    JavaScript 2023年6月10日
    00
  • javascript对HTML字符转义与反转义

    下面是关于JavaScript对HTML字符转义与反转义的完整攻略。 什么是HTML字符转义与反转义? HTML字符转义指的是将HTML代码中的特殊字符转换成它们对应的实体编码,这是为了避免这些字符被解析成HTML代码而产生错误。例如,把小于号 < 转换成 &lt;。 HTML字符反转义指的是将实体编码转换回原始的字符,以便正确地显示内容。 J…

    JavaScript 2023年5月20日
    00
  • 关于vue.js中this.$emit的理解使用

    关于vue.js中this.$emit的理解与使用攻略 什么是this.$emit? 在Vue.js中,this.$emit()是一个特殊的方法,用于定制组件的自定义事件。 在子组件中使用this.$emit(eventName, data)可以触发父组件的自定义事件,这样父组件就能够在监听到该事件后进行相应的处理。 this.$emit使用方法 在Vue.…

    JavaScript 2023年6月10日
    00
  • ajax请求前端跨域问题原因及解决方案

    下面是“ajax请求前端跨域问题原因及解决方案”的完整攻略。 前端跨域问题原因 同源策略的限制 同源策略是一种约定,它是一种浏览器最核心也是最基本的安全约定。同源策略是指,协议、域名、端口必须相同,否则就会产生跨域问题。 浏览器为了保障用户的安全,限制页面中通过ajax(XMLHttpRequest)发起跨域请求。因为在没有跨域限制的情况下,一个恶意网站可以…

    JavaScript 2023年6月11日
    00
  • JS实现多物体运动的方法详解

    JS实现多物体运动的方法详解 在Web开发中,常常需要实现多个物体同时进行运动的效果,这时我们可以使用JavaScript来控制多个DOM元素的运动。本文将详细讲解JS实现多物体运动的方法。 步骤一:获取多个DOM元素的初始状态 在程序开始运行之前,我们需要获取多个DOM元素的初始状态,这些状态包括元素的初始位置、大小、颜色等信息。在JavaScript中可…

    JavaScript 2023年6月11日
    00
  • javascript ES6 新增了let命令使用介绍

    JavaScript ES6 新增了let命令使用介绍 在ES6之前,JavaScript中定义变量只有两种方式:var 和 window.xxx;ES6新增了let和const命令,增加了JavaScript定义变量的方式,let命令用于声明一个只在代码块内部可用的变量。 let命令基本用法 let 命令的用法与 var 完全相同,可以使用 let 命令声…

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