Следуя приведенному ниже примеру тривиального кода, скопированному непосредственно из https://nodejs.org/api/zlib.html#zlib_zlib, файл gzip будет поврежден, если входной текстовый файл содержит символы новой строки!
При распаковке полученного файла из терминал, использующий unzip input.txt.gz
Я получаю следующую ошибку (разархивирование двойным щелчком по файлу в Finder приведет к аналогичной ошибке):
Подпись конца центрального каталога не найдена. Либо этот файл не является zip-файлом, либо он представляет собой один диск из многочастного архива. В последнем случае центральный каталог и комментарий к zipfile будут найдены на последнем диске (дисках) этого архива.
Чего мне не хватает? Конечно, вы должны быть в состоянии сжимать текстовые файлы, содержащие символы новой строки?!
Я использую Ma c OS 10.15.3 с узлом 12.14.1.
input.txt (попытался вставить завершающий символ новой строки, но он не делает различий):
hello
world
Node.js код:
const { createGzip } = require('zlib');
const { pipeline } = require('stream');
const {
createReadStream,
createWriteStream
} = require('fs');
const gzip = createGzip();
const source = createReadStream('input.txt');
const destination = createWriteStream('input.txt.gz');
pipeline(source, gzip, destination, (err) => {
if (err) {
console.error('An error occurred:', err);
process.exitCode = 1;
}
});