Node.js - Почтовый индекс/Разархивировать папку - программирование
Подтвердить что ты не робот

Node.js - Почтовый индекс/Разархивировать папку

Я погружаюсь в Zlib из node.js. Мне удалось сжать и распаковать файлы с помощью приведенных примеров (http://nodejs.org/api/zlib.html#zlib_examples), но я не смог найти больше о том, как сделать то же самое для папок?

Одной из возможностей (но я считаю себя мастером) является использование модуля node-zip и добавление всех файлов в папку по одному. Но я буду сталкиваться с проблемой при распаковке (в этом случае я потеряю папки).

Любая идея сжимать (а затем распаковывать) целую папку (соблюдая иерархию подпользователей) с помощью node.js?

Спасибо.

4b9b3361

Ответ 1

Я, наконец, получил его, с помощью @generalhenry (см. комментарии к вопросу) и

как указано в комментариях, нам нужно сжать папку в два этапа:

  • Преобразование папки в файл .tar

  • Сжатие .tar файла

Для выполнения первого шага мне понадобилось два модуля node.js:

npm install tar
npm install fstream

Первый позволяет нам создавать файлы .tar. Здесь вы можете получить доступ к исходному коду https://github.com/isaacs/node-tar

Второй модуль node поможет нам прочитать папку и записать файл. Что касается базового модуля fs node.js, я не знаю, можно ли читать каталог (я не говорю о получении всех файлов в массиве, используя fs.readdir, но обрабатывая все файлы и их организация в папках).

Затем, когда я конвертирую папку в файл .tar, я могу сжать ее с помощью Gzip() Zlib.

Вот окончательный код:

var fstream = require('fstream'),
    tar = require('tar'),
    zlib = require('zlib');

fstream.Reader({ 'path': 'path/to/my/dir/', 'type': 'Directory' }) /* Read the source directory */
.pipe(tar.Pack()) /* Convert the directory to a .tar file */
.pipe(zlib.Gzip()) /* Compress the .tar file */
.pipe(fstream.Writer({ 'path': 'compressed_folder.tar.gz' })); /* Give the output file name */

Это помогло мне сжать всю папку с помощью node.js

Еще 2 вещи:

  • Как вы можете видеть, в модуле tar отсутствует документация. Я надеюсь, что это будет улучшено вскоре после того, как в двух приведенных примерах рассказывается о том, как извлечь контент из файла .tar.

  • Я использовал модуль fstream, чтобы помочь мне обработать исходный каталог. Можно ли это обойти с помощью fs? Я не знаю (пожалуйста, прокомментируйте, если у вас есть идея).

Ответ 2

Вы можете использовать tar-stream для создания tar-архива. Его гораздо более гибкий и простой, чем node -tar, в том, что:

  • Вы можете добавлять файлы в архив (а не только каталоги, что является ограничением node -tar)
  • Он работает с обычными файловыми потоками node (node -tar странно требует использования модуля fstream)
  • Его полностью документированный (node -tar не хорошо документирован)
  • Вы можете создать архив, не попав в файловую систему

Создайте tar-архив, затем скомпилируйте его с помощью zlib, затем напишите его везде, где хотите (сеть, файловая система и т.д.).