как перевести blob в файловый формат в javascript для nodejs

Аватар пользователя Maksim Litvinov
Maksim Litvinov
22 апреля 2025

В Node.js работа с Blob не так распространена, как в браузерной среде, поскольку Blob — это специфичный для веб-API объект, используемый для представления бинарных данных. Однако, вы можете использовать различные подходы, чтобы работать с бинарными данными в Node.js, и перевести их в файловый формат.

Вот пошаговый подход, как это сделать:

1. Импортируйте необходимые модули

В Node.js вам понадобятся встроенные модули fs для работы с файловой системой и, возможно, buffer для управления данными:

const fs = require('fs');
const { Buffer } = require('buffer');

2. Создание Блоба

Если вы получаете данные из источника (например, HTTP-запроса), вы можете сначала создать Buffer, который будет представлять ваши данные в бинарном формате. Если у вас уже есть данные в виде Blob, вам нужно будет преобразовать их в Buffer. Например, вот как это можно сделать:

const createBlob = () => {
  // Этот код подразумевает, что у вас есть функция, создающая Blob.
  // В реальных сценариях вы получаете Blob из какого-то источника.
  const data = new Uint8Array([/* ваши бинарные данные */]);
  return new Blob([data]);
};

3. Преобразование Blob в Buffer

Для преобразования Blob в Buffer вы можете использовать FileReader, но так как FileReader доступен только в браузере, вам нужно будет сделать это немного иначе в Node.js. Обычно это делается при помощи вспомогательной библиотеки или путем работы с Buffer напрямую.

Примерно так:

const toBuffer = (blob) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onloadend = () => {
      const arrayBuffer = reader.result;
      const buffer = Buffer.from(arrayBuffer);
      resolve(buffer);
    };
    reader.onerror = reject;
    reader.readAsArrayBuffer(blob);
  });
};

4. Сохранение Buffer в файл

Теперь, когда у вас есть Buffer, вы можете сохранить его на файл:

const saveBufferToFile = (buffer, filename) => {
  fs.writeFile(filename, buffer, (err) => {
    if (err) {
      console.error('Ошибка при записи файла:', err);
    } else {
      console.log('Файл успешно сохранён:', filename);
    }
  });
};

5. Полная реализация

Вот пример полной реализации, который показывает, как можно объединить все шаги:

const fs = require('fs');

// Создаем фейковый Blob (здесь ваш источник данных)
const createBlob = () => {
  const data = new Uint8Array([/* ваши бинарные данные */]);
  return new Blob([data]);
};

const toBuffer = (blob) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onloadend = () => {
      const arrayBuffer = reader.result;
      const buffer = Buffer.from(arrayBuffer);
      resolve(buffer);
    };
    reader.onerror = reject;
    reader.readAsArrayBuffer(blob);
  });
};

const saveBufferToFile = (buffer, filename) => {
  fs.writeFile(filename, buffer, (err) => {
    if (err) {
      console.error('Ошибка при записи файла:', err);
    } else {
      console.log('Файл успешно сохранён:', filename);
    }
  });
};

// Основной код
(async () => {
  const blob = createBlob(); // Ваш Blob
  const buffer = await toBuffer(blob);
  saveBufferToFile(buffer, 'outputfile.bin'); // Укажите нужное имя файла
})();

Примечание

  • Если вы работаете с клиентским кодом (например, с fetch), вы можете получить данные уже в формате ArrayBuffer, что упростит работу с бинарными данными.
  • В зависимости от используемого вами стек и библиотек, возможно, вы сможете использовать другие решения, такие как использование stream для обработки больших объемов данных.

Этот метод даст вам возможность эффективно обрабатывать бинарные данные и сохранять их в файл в Node.js.

1 0
Поможем с выбором
Если у вас есть вопросы о формате или вы не знаете, что выбрать, оставьте свой номер — мы позвоним и ответим на все вопросы
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»