2016-10-05 2 views
0

Существуют различные zip-модули для узла. Как правило, они, кажется, следуют образцу, как это:эффективное чтение заголовка zip-файла в node.js

// Creating a zipfile object 
var zf = new zipfile.ZipFile('./test/data/world_merc.zip'); 

// the zipfile has a list of names: 
// zf.names[0] === 'world_merc.prj' 

Сниппет выше был снят с node-zipfile README здесь https://github.com/mapbox/node-zipfile, но, например, подобный пример существует для AdmZip пакета: https://github.com/cthackers/adm-zip.

Так что это показалось мне странным, потому что кажется, что обе эти библиотеки предполагают синхронный код (по крайней мере, вам нужно открыть файл, чтобы прочитать заголовок, который блокируется, правильно)?

Итак, я вырыл в реализацию AdmZip, и, оказывается, вы можете передать буфер в конструктор AdmZip, например. Вы можете сделать это:

fs.readFile('./my_file.zip', function(err, buffer) { 
    var zip = new AdmZip(buffer); 
    var zipEntries = zip.getEntries(); 
}); 

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

Так что это было очень длинное руководство в вопросе, существует ли библиотека узлов, которая будет эффективно и асинхронно читать содержимое zip (например, не реализовать весь zip-файл в памяти, если все, что я собираюсь сделать, это посмотрите на центральный заголовок каталога)?

ответ

Смежные вопросы