Пошаговые инструкции Для начинающих 12 мин

Как преобразовать файл в Base64 в n8n

Получите Base64 из binary-файла штатным Extract from File. 10 шагов, готовый workflow, учебный TXT и обратное восстановление с проверкой байтов.

n8n Файлы Base64

Иногда API принимает файл не вложением, а строкой внутри JSON. Для этого используют Base64 — текстовое представление байтов. В n8n такую строку можно получить штатным Extract from File. Сделаем небольшой файл, закодируем его, восстановим обратно и проверим, что не потеряли ни одного байта.

Результат инструкции

Получим file_base64 для TXT-файла с текстом «Привет, n8n!» и переносом строки в конце. Исходник занимает 19 байт в UTF-8, результат — 28 символов Base64. Затем создадим восстановленный файл и сравним его байты с исходными.

Никакой отправки в API здесь нет. Схема готовит и проверяет данные для такого шага. Base64 не шифрует содержимое и не делает документ безопасным для передачи: любой получатель строки сможет восстановить файл.

Что понадобится

  • Отдельный новый workflow в n8n. Проверено на n8n 2.42.4, Extract from File 1.1, Convert to File 1.1 и Code 2.
  • Учебный текст из статьи. Не нужны ключи, внешние аккаунты и настоящие документы.
  • Файл для примера создаётся внутри n8n, поэтому доступ к папкам компьютера или сервера не требуется.

Как установить n8n локально через Docker

Шаг 1. Импортируйте схему

Скачать n8n-file-to-base64.json

Создайте новый workflow, выберите Import from File и загрузите JSON. Сохраните его под отдельным названием. Для ручного запуска публиковать схему не нужно. Восемь узлов соединены последовательно:

text
Manual Trigger → Sample Text → Make File → Check File → Encode File → Check Base64 → Restore File → Check Restored

Sample Text, Check File, Check Base64 и Check Restored — Code, JavaScript, Run Once for All Items. Make File и Restore File — Convert to File, Encode File — Extract from File. Названия сохраните: код обращается к другим узлам по имени. Не включайте Continue On Fail и Always Output Data.

Шаг 2. Задайте текст исходного файла

В Sample Text вставьте:

javascript
return [{ json: { text: "Привет, n8n!\n" } }];

В строке JavaScript сочетание обратного слеша и буквы n задаёт один перевод строки. Этот последний байт тоже попадёт в Base64. Если убрать перевод строки, строка результата будет другой — это корректно.

Исходник передаётся как один item с одним полем text. Пока здесь ещё нет файла и binary. Для первого запуска не меняйте текст: так будет проще сверить точный результат из статьи.

Шаг 3. Создайте UTF-8 файл

В Make File выберите Convert to File → Convert to Text File. Настройте:

Поле Значение Результат
Text Input Field text Взять строку из Sample Text
Put Output File in Field document Создать binary.document
File Name в Options file-base64-demo.txt Задать имя файла
Encoding в Options utf8 Сохранить текст как UTF-8

Add Byte Order Mark (BOM) выключите. Так в исходном примере не появятся дополнительные три байта. Имя document — поле n8n, не путь к файлу на диске. Convert to Text File в этой версии создаёт binary с MIME text/plain.

Если у вас уже есть binary-файл от HTTP Request или Webhook, этот узел создания не нужен. Но не подключайте рабочий файл к учебной схеме без адаптации: проверки ниже специально ожидают наш TXT и известный исходный текст.

Шаг 4. Проверьте байты до кодирования

В Check File вставьте:

javascript
const items = $input.all();
if (items.length !== 1) throw new Error('one_file_required');
const source = $('Sample Text').first().json;
if (Object.keys(source).join('|') !== 'text' || typeof source.text !== 'string' ||
    !source.text.trim() || !source.text.isWellFormed() || source.text.includes('\u0000')) {
  throw new Error('source_text_invalid');
}
const item = items[0];
if (Object.keys(item.binary ?? {}).join('|') !== 'document') throw new Error('document_required');
const meta = item.binary.document;
if (meta.fileName !== 'file-base64-demo.txt' || meta.mimeType !== 'text/plain') throw new Error('file_metadata_invalid');
const bytes = await this.helpers.getBinaryDataBuffer(0, 'document');
if (bytes.length < 1 || bytes.length > 4096) throw new Error('file_size_invalid');
if (!bytes.equals(Buffer.from(source.text, 'utf8'))) throw new Error('source_bytes_mismatch');
return [{ json: {
  file_name: meta.fileName, mime_type: meta.mimeType, source_bytes: bytes.length
}, binary: item.binary }];

Проверка требует один файл в document с нужным именем и MIME, размером не больше 4096 байт. Затем сравнивает его с UTF-8-байтами Sample Text. У учебного примера должно получиться source_bytes: 19. Пустой по смыслу текст, NUL и повреждённая Unicode-строка не принимаются.

Эти ограничения относятся к нашему TXT-примеру, не ко всем файлам, которые можно закодировать. Чтение через getBinaryDataBuffer важно при хранении binary на диске. Поле binary.document.data может содержать служебную ссылку вроде filesystem, а не текст Base64. Не копируйте его в JSON запроса как содержимое файла.

Шаг 5. Получите Base64 штатным узлом

В Encode File выберите Extract from File и параметры:

Параметр Значение Для чего
Operation Move File to Base64 String Кодировать байты, а не извлекать текст
Input Binary Field document Прочитать исходный файл
Destination Output Field file_base64 Записать Base64 в JSON
Keep Source в Options Both Оставить метаданные JSON и исходный binary

Выберите именно Move File to Base64 String. Операция Extract From Text File вернёт обычный текст, а не Base64. Выходная строка находится в json.file_base64. Это новое поле, не переименование binary.document.data.

В проверенной версии File Encoding и Strip BOM не перекодируют байты в этой операции. Для Base64 берётся исходный buffer. В тесте файл с BOM сохранил его и при Strip BOM: включено, и при выключенном значении. Поэтому исправлять UTF-8 или удалять BOM нужно отдельным осознанным действием до кодирования, если это вообще требуется получателю.

Для нашего исходника ожидается 0J/RgNC40LLQtdGCLCBuOG4hCg==. Это обычная стандартная Base64-строка без префикса data:text/plain;base64,. Такой префикс нужен только если конкретный интерфейс требует Data URL.

Шаг 6. Сверьте Base64 с исходным файлом

В Check Base64 вставьте:

javascript
const items = $input.all();
if (items.length !== 1 || !items[0].binary?.document) throw new Error('source_binary_required');
const item = items[0], row = item.json;
const value = row.file_base64;
const bytes = await this.helpers.getBinaryDataBuffer(0, 'document');
if (typeof value !== 'string' || value !== bytes.toString('base64')) throw new Error('base64_mismatch');
if (row.source_bytes !== bytes.length || row.file_name !== 'file-base64-demo.txt' || row.mime_type !== 'text/plain') {
  throw new Error('source_metadata_missing');
}
if (value.length !== 4 * Math.ceil(bytes.length / 3)) throw new Error('base64_length_mismatch');
return [{ json: {
  file_name: row.file_name, mime_type: row.mime_type,
  source_bytes: row.source_bytes, file_base64: value
}, binary: item.binary }];

Значение приходит из Encode File. Code только сверяет его с байтами сохранённого исходника и проверяет метаданные. Сам результат для следующего шага берётся из штатного узла, не заменяется независимо вычисленной строкой.

Размер стандартной Base64-строки вычисляется как 4 × округление вверх от числа байтов, делённого на 3. Для 19 байт это 28 символов. Кодирование не уменьшает файл: при больших размерах строка обычно примерно на треть длиннее исходных байтов, ещё до оформления JSON.

Шаг 7. Восстановите файл для проверки

В Restore File выберите Convert to File → Move Base64 String to File. Задайте:

  • Base64 Input Field: file_base64.
  • Put Output File in Field: restored.
  • File Name в Options: выражение {{ $json.file_name }}.
  • MIME Type в Options: выражение {{ $json.mime_type }}. Add BOM оставьте выключенным.

В импортированной схеме выражения уже заполнены. Восстановление — контрольный шаг: он показывает, что получатель сможет декодировать именно наши байты. Имя и MIME передаются отдельно, поскольку сама Base64-строка их не содержит.

После Restore File исходные JSON-поля могут отсутствовать. Это нормально: следующий Code берёт проверенные метаданные по ссылке на Check Base64. binary.restored — восстановленный файл, не исходный document.

Шаг 8. Сравните восстановленные байты

В Check Restored вставьте:

javascript
const items = $input.all();
if (items.length !== 1 || Object.keys(items[0].binary ?? {}).join('|') !== 'restored') {
  throw new Error('restored_file_required');
}
const item = items[0], source = $('Check Base64').first().json;
const meta = item.binary.restored;
if (meta.fileName !== source.file_name || meta.mimeType !== source.mime_type) throw new Error('restored_metadata_mismatch');
const bytes = await this.helpers.getBinaryDataBuffer(0, 'restored');
const expected = Buffer.from($('Sample Text').first().json.text, 'utf8');
if (!bytes.equals(expected) || bytes.toString('base64') !== source.file_base64) throw new Error('restored_bytes_mismatch');
return [{ json: {
  file_name: meta.fileName, source_bytes: bytes.length, base64_chars: source.file_base64.length,
  file_base64: source.file_base64, verified: true, action_performed: false
}, binary: item.binary }];

Код проверяет имя и MIME, читает restored и сравнивает байты с исходным текстом и проверенной Base64. Успех означает точное совпадение, включая последний перенос строки. По внешнему виду текста нельзя заметить все отличия — например, BOM или CRLF вместо LF.

Это проверка нашего учебного файла. Для другого источника нужно сравнивать с сохранёнными исходными байтами или согласованным хешем, а не с Sample Text. Не оставляйте неизменённую контрольную строку при переходе на PDF или изображение.

Шаг 9. Запустите весь workflow

Нажмите Execute workflow от Manual Trigger. Все восемь узлов должны завершиться успешно. В JSON последнего узла ожидается:

json
{
  "file_name": "file-base64-demo.txt",
  "source_bytes": 19,
  "base64_chars": 28,
  "file_base64": "0J/RgNC40LLQtdGCLCBuOG4hCg==",
  "verified": true,
  "action_performed": false
}

В Binary последнего узла будет restored. Его можно скачать и сравнить с учебным исходником. Скачиваемый образец содержит точно те 19 байт, которые проверены в схеме:

Скачать учебный TXT-файл

verified: true подтверждает проверки схемы и совпадение байтов. action_performed: false означает, что файл никуда не отправлялся. Не подменяйте эти поля вручную, если промежуточный узел завершился ошибкой.

Шаг 10. Проверьте чувствительность к изменениям

Добавьте одну букву в Sample Text и выполните всю цепочку. Строка Base64 должна измениться, а Check Restored — пройти. Затем верните исходный текст. Так проверяется реальная связь результата с содержимым, а не совпадение с заранее вставленным ответом.

Чтобы увидеть отказ настройки, в Encode File временно поменяйте Destination Output Field с file_base64 на wrong. Ожидается base64_mismatch в Check Base64, Restore File не должен запуститься. Верните имя и повторите полный запуск.

Не используйте только зелёный статус запуска как доказательство наличия файла. Если Sample Text возвращает ноль items, последующие узлы не выполняются и результата нет. Пустую выгрузку схема не создаёт.

Если результат отличается

Симптом Причина Что сделать
Вместо Base64 пришёл исходный текст Выбрано Extract From Text File Вернуть Move File to Base64 String
source_binary_required Потерян document после Encode File Выбрать Keep Source: Both
source_metadata_missing Сохранён только Binary Вернуть JSON вместе с binary
source_bytes_mismatch Изменены Encoding или Add BOM Сверить исходные UTF-8-байты
restored_file_required Неверное выходное binary-поле Вернуть restored

Как использовать строку в запросе к API

Сначала посмотрите контракт получателя: ему может требоваться чистая Base64, Data URL, Base64url или обычный multipart-файл. Это разные форматы. Если API просит JSON с file_base64, передавайте значение из Check Base64, а имя и MIME — отдельными полями, если они предусмотрены контрактом.

Не добавляйте кавычки вручную внутрь значения и не кодируйте повторно уже готовую строку. При JSON-отправке оформлением строк занимается HTTP Request. Если сервис принимает multipart, Base64 может вообще не понадобиться: файл можно отправить как binary.

Как отправить файл через HTTP Request в n8n

Обратная задача: Base64 в файл

В схеме установлен небольшой учебный лимит. Для больших файлов учитывайте объём исходника, Base64 и историю executions: секретный документ остаётся секретным и в виде строки. Реальный API, большие файлы и работу с закрытыми данными здесь не тестировали.

Что проверено редакцией

18 октября 2026 года точная публичная схема проверена на n8n 2.42.4 в отдельном Docker-экземпляре с binary на диске. Все 36 сценариев прошли: исходный UTF-8 TXT, Unicode, CRLF, крайние пробелы, один, два и три байта, лимит 4096 байт, исходный BOM, включённый и выключенный Strip BOM, изменение File Encoding при Base64-операции; пустой и пробельный текст, NUL, непарный суррогат, 4097 байт, null и объект, лишнее поле и два items; неверные источник, binary-поле, имя файла, Add BOM и UTF-16 при создании; неверное поле кодирования, Destination, чтение как текст и потеря JSON или binary; неверные источник, выходное поле, имя и MIME восстановленного файла. Пустой источник не создал результат. Все успешные варианты восстановлены штатным Convert to File с точным сравнением байтов. Служебное binary.data подтверждено как filesystem-ссылка, не Base64. У Base64-операции File Encoding и Strip BOM не меняли байты. Образец на 19 байт и строка на 28 символов дополнительно проверены стандартной библиотекой Python base64. Контейнер остановлен, существующие workflows не менялись. Клики редактора, ручное скачивание из n8n, внешние API, Cloud, PDF, изображения и большие файлы не тестировались. Обложка — AI-иллюстрация.

Частые вопросы

Какой узел переводит файл в Base64?

Extract from File с операцией Move File to Base64 String. Укажите имя binary-поля и Destination Output Field для результата.

Можно взять строку из binary.document.data?

На это нельзя рассчитывать: при файловом хранении там может быть служебная filesystem-ссылка. Используйте штатную операцию, которая читает реальные байты.

Почему Base64 длиннее файла?

Это кодирование байтов текстовыми символами, не сжатие. Стандартная длина — 4 × ceil(байты / 3), без JSON-обёртки.

Strip BOM удалит BOM при кодировании?

В проверенной операции Move File to Base64 String — нет. Кодируются исходные байты; параметры чтения текста их не меняют. Удаление BOM при необходимости делается отдельно до кодирования.

Base64 шифрует содержимое?

Нет. Строку можно декодировать без ключа. Не публикуйте в ней секреты и не считайте кодирование разрешением передавать документ стороннему сервису.

Дальше по теме

Похожие материалы