Проблема с преобразованием base64 в nodejs с использованием Buffer.alloc - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь преобразовать код преобразования base64, который использовался для использования небезопасного конструктора Buffer, чтобы вместо этого использовать метод Buffer.allo c, но преобразование ведет себя странно. Вот мой код:

let originalText = JSON.stringify({city: "New York", date: "2020/05/12"});
console.log("DATA:           " + originalText)

let base64Text = Buffer.alloc(originalText.length, originalText, "binary").toString('base64');
console.log("Base64 version: " + base64Text);

let loadedBuffer = Buffer.alloc(base64Text.length, base64Text, 'base64');

const reconstitutedData  = loadedBuffer.toString();
console.log("Result:         " + reconstitutedData);

И вот результат:

DATA:           {"city":"New York","date":"2020/05/12"}
Base64 version: eyJjaXR5IjoiTmV3IFlvcmsiLCJkYXRlIjoiMjAyMC8wNS8xMiJ9
Result:         {"city":"New York","date":"2020/05/12"}{"city":"New

Преобразование правильное, за исключением повторяющегося бита в конце. Очевидно, что длина строки base64 не подходит для использования здесь, но это не имеет смысла, потому что не похоже, что есть способ узнать длину исходной строки. Может я неправильно использую API?

1 Ответ

2 голосов
/ 17 июня 2020

Buffer.alloc ( do c) не для того, чего вы хотите достичь. Второй аргумент Buffer.alloc - это заполнение буфера полностью этим значением, повторяя при необходимости. Обычно используется для создания буфера с нулевым заполнением, например:

// 0 is the default value, so is not needed actually. Set for demo purposes.
let zerobuf = Buffer.alloc(1000, 0);

В этом случае вам нужно Buffer.from ( do c):

let base64Text = Buffer.from(str).toString("base64");
let reconstitutedData = Buffer.from(base64Text, "base64").toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...