Как закодировать бинарные файлы в base64 с помощью javascript?

Пользователь

от jedidiah.brown , в категории: JavaScript , 2 года назад

Как закодировать бинарные файлы в base64 с помощью javascript?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от camren , 2 года назад

@jedidiah.brown 

В JavaScript можно использовать метод btoa() для кодирования бинарных файлов в Base64.


Ниже приведен пример кода, который читает содержимое бинарного файла с помощью FileReader, а затем кодирует его в Base64 с помощью метода btoa():

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
// Создаем новый FileReader
var reader = new FileReader();

// Задаем функцию, которая выполнится после загрузки файла
reader.onload = function() {

  // Получаем содержимое файла в виде бинарных данных
  var binaryFile = reader.result;

  // Кодируем бинарные данные в Base64
  var base64File = btoa(binaryFile);

  // Выводим закодированные данные в консоль
  console.log(base64File);
};

// Читаем бинарный файл
reader.readAsBinaryString(yourBinaryFile);


Обратите внимание, что вместо yourBinaryFile нужно указать объект файла, который вы хотите закодировать в Base64.

Пользователь

от francisco.friesen , год назад

@jedidiah.brown 

Приведенный выше код демонстрирует использование метода FileReader для чтения содержимого файла в виде бинарных данных. Затем эти бинарные данные закодируются в Base64 с помощью метода btoa(). После этого закодированные данные выводятся в консоль.


Примечание: Методы readAsBinaryString и btoa не поддерживаются в некоторых современных браузерах, таких как Firefox. Вместо этого рекомендуется использовать методы readAsArrayBuffer и Uint8Array для чтения файлов и кодирования данных.


Вот пример обновленного кода, который использует readAsArrayBuffer и Uint8Array:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var reader = new FileReader();

reader.onload = function() {
  var arrayBuffer = reader.result;
  var uint8Array = new Uint8Array(arrayBuffer);
  var base64File = base64ArrayBuffer(uint8Array);
  console.log(base64File);
};

// Читаем бинарный файл
reader.readAsArrayBuffer(yourBinaryFile);

function base64ArrayBuffer(arrayBuffer) {
  var base64 = '';
  var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

  var bytes = new Uint8Array(arrayBuffer);
  var byteLength = bytes.byteLength;
  var byteRemainder = byteLength % 3;
  var mainLength = byteLength - byteRemainder;

  var a, b, c, d;
  var chunk;

  // Проходимся по каждым 3 байтам данных
  for (var i = 0; i < mainLength; i = i + 3) {
    // Склеиваем три байта в одно число
    chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];

    // Извлекаем каждую из шести групп по 6 бит
    a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
    b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
    c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
    d = chunk & 63; // 63       = 2^6 - 1

    // Переводим каждую из групп по 6 бит в символ из encodings
    base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
  }

  // Если остались меньше 3 байтов, кодируем их отдельно
  if (byteRemainder == 1) {
    chunk = bytes[mainLength];

    a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2

    // Дополняем символами заполнения "=", чтобы получилось полное количество символов Base64
    base64 += encodings[a] + '==';
  } else if (byteRemainder == 2) {
    chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];

    a = (chunk & 16128) >> 8; // 16128 = (2^6 - 1) << 8
    b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4

    // Дополняем символом заполнения "=", чтобы получилось полное количество символов Base64
    base64 += encodings[a] + encodings[b] + '=';
  }

  return base64;
}


Данный код предоставляет функцию base64ArrayBuffer, которая принимает Uint8Array (массив данных, полученных из ArrayBuffer) и возвращает закодированную строку Base64. Эта функция использует соответствующие символы из алфавита Base64 (encodings) для перевода каждой группы из 3 байтов в Base64.


После вызова функции base64ArrayBuffer выводится закодированная строка Base64 в консоль.