Base64 до байтов, теряющих информацию в узле

#node.js

#node.js

Вопрос:

Я использую версию узла 6.6.0. У меня есть довольно большая (1 МБ) строка base64, которую я хочу сохранить в байтах в моей файловой системе. Я использую следующий код:

 myString = "abase64string.....";
data = Buffer.from(myString, "base64");
 

Но когда я пытаюсь проверить количество байтов data , значение всегда одно и то же (независимо от изображения): 262144 байта (256 КБ).

Я что-то здесь упускаю? В документации узла указано, что максимальный размер буфера составляет 1 ГБ.

Комментарии:

1. Откуда myString берется? Похоже, что он усечен.

2. Поступает из POST запроса. Измерение размера строки в байтах составляет приблизительно 1 МБ. Обратите внимание, что это работает для строк размером менее 256 КБ.

3. Выполните тест без http-сервера. Напишите простой скрипт, который считывает файл с диска и декодирует его в base64 (возможно, вы захотите сначала сгенерировать версию файла в base64). Иногда мешают другие вещи, такие как ограничения длины сообщения или тайм-аут HTTP-запроса, настроенные на сервере (nginx, apache или даже модуль http узла)

4. @slebetman подойдет! К вашему сведению, ограничение полезной нагрузки установлено на уровне 5 МБ. Я вижу, что моя полезная нагрузка имеет размер более 1 МБ, в то время как строка base64 составляет примерно 1 МБ.

5.Я имел в виду более конкретно, на самом ли myString деле просто аргумент передается первому 'data' обработчику событий ответа, или это myString весь буферизованный ответ (конкатенация всех 'data' фрагментов событий), или вы используете request модуль из npm, который делает все это за вас?

Ответ №1:

Комментарий, сделанный @mscdex, помог решить проблему, поскольку строка действительно была усечена. Я искал значение терминатора для строки base64:

 var terminator = myString.indexOf("=");
var len = myString.length;
 

и сравнил его с длиной строки. Когда я увидел, что значения были очень разными (более 2), я понял, что проблема не в сервере.