Uint8Array.prototype.toBase64()
Базовый уровень Недавно появился
Эта функция работает во всех последних версиях устройств и браузеров. Эта функция может не работать в более старых версиях устройств или браузеров. Она доступна во всех браузерах с сентября 2025 года.
Метод toBase64() экземпляров Uint8Array возвращает строку, закодированную в формате base64, основанную на данных в этом объекте Uint8Array.
Этот метод следует предпочесть Window.btoa(), особенно если у вас уже есть Uint8Array, содержащий объект, поскольку вам не нужно сначала преобразовывать его в строку.
Синтаксис
toBase64() toBase64(options)
Параметры
-
optionsНеобязательно - Объект, настраивающий формат строки base64. Он может содержать следующие свойства:
-
alphabetНеобязательно - Строка, определяющая используемый алфавит base64. Это может быть одно из следующего:
-
"base64"(по умолчанию) - Кодирует входные данные стандартным алфавитом base64, который использует
+и/. -
"base64url" - Кодирует входные данные URL-безопасным алфавитом base64, который использует
-и_.
-
-
omitPaddingНеобязательно - Логическое значение, указывающее, следует ли опускать символы заполнения (
=) в конце строки base64. Значение по умолчанию —false.
-
Возвращаемое значение
Строка, закодированная в base64, представляющая данные в Uint8Array.
Исключения
-
TypeError - Выбрасывается в одном из следующих случаев:
- Объект
optionsне является объектом илиundefined. options.alphabetне имеет ожидаемых значений илиundefined.
- Объект
Примеры
Кодирование бинарных данных
В этом примере используются параметры alphabet и omitPadding по умолчанию для кодирования данных из Uint8Array в строку base64.
const uint8Array = new Uint8Array([29, 233, 101, 161]); console.log(uint8Array.toBase64()); // "HelloQ=="
Кодирование данных без заполнения
const uint8Array = new Uint8Array([29, 233, 101, 161]);
console.log(uint8Array.toBase64({ omitPadding: true })); // "HelloQ"
Кодирование данных с URL-безопасным алфавитом
В этом примере объект URLSearchParams заполняется строкой, закодированной в base64, с использованием URL-безопасного алфавита.
const uint8Array = new Uint8Array([46, 139, 222, 255, 42, 46]);
const base64 = uint8Array.toBase64({ alphabet: "base64url" });
const params = new URLSearchParams();
params.set("data", base64);
console.log(params.toString()); // "data=Love_you"
Потоковое кодирование
Этот пример адаптирован из исходного предложения, демонстрируя, как реализовать потоковую передачу в пользовательском коде. Он имитирует API TextEncoder с опцией stream.
class Base64Encoder {
#extra;
#extraLength;
constructor() {
this.#extra = new Uint8Array(3);
this.#extraLength = 0;
}
// Partly derived from https://github.com/lucacasonato/base64_streams/blob/main/src/iterator/encoder.ts
encode(chunk = Uint8Array.of(), options = {}) {
const stream = options.stream ?? false;
if (this.#extraLength > 0) {
const bytesNeeded = 3 - this.#extraLength;
const bytesAvailable = Math.min(bytesNeeded, chunk.length);
this.#extra.set(chunk.subarray(0, bytesAvailable), this.#extraLength);
chunk = chunk.subarray(bytesAvailable);
this.#extraLength += bytesAvailable;
}
if (!stream) {
// assert: this.#extraLength.length === 0 || this.#extraLength === 3 || chunk.length === 0
const prefix = this.#extra.subarray(0, this.#extraLength).toBase64();
this.#extraLength = 0;
return prefix + chunk.toBase64();
}
let extraReturn = "";
if (this.#extraLength === 3) {
extraReturn = this.#extra.toBase64();
this.#extraLength = 0;
}
const remainder = chunk.length % 3;
if (remainder > 0) {
this.#extra.set(chunk.subarray(chunk.length - remainder));
this.#extraLength = remainder;
chunk = chunk.subarray(0, chunk.length - remainder);
}
return extraReturn + chunk.toBase64();
}
}
const encoder = new Base64Encoder();
console.log(
encoder.encode(Uint8Array.of(72, 101, 108, 108, 111), { stream: true }),
);
// "SGVs"
console.log(
encoder.encode(Uint8Array.of(32, 87, 111, 114, 108, 100), { stream: true }),
);
// "bG8gV29y"
console.log(encoder.encode());
// "bGQ="
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
toBase64 |
140 |
140 |
133 |
124 |
18.2 |
140 |
133 |
92 |
18.2 |
30.0 |
140 |
18.2 |
1.1.22 |
2.5.0 |
25.0.0 |
Смотрите также
- Полифил
Uint8Array.prototype.toBase64вcore-js - Полифил es-shims для
Uint8Array.prototype.toBase64 Uint8ArrayUint8Array.fromBase64()Uint8Array.prototype.setFromBase64()Window.btoa()
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array/toBase64