#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), я понял, что проблема не в сервере.