Попробуйте использовать Archiver с потоком, но приложение не работает - PullRequest
0 голосов
/ 22 октября 2019

Работа на узле с архиватором библиотеки. Я хочу добавить буферы и создать заархивированный поток. Похоже, что приложение не работает, а архив не добавлен.

Это функция

async function archiveFiles(files: Buffer[]): Promise<Buffer> {
  const archive = archiver("zip", {
    zlib: {level: 9} // Sets the compression level.
  });

  archive.on("warning", wrn => logger.warn(wrn));
  archive.on("error", err => {
    logger.warn(err);
    throw err;
  });
  const outputStreamBuffer = new streamBuffers.WritableStreamBuffer({
    initialSize: (1000 * 1024),   // start at 1 Gig
    incrementAmount: (100 * 1024) // grow by 100 kilobytes each time buffer overflows.
  });
  archive.pipe(outputStreamBuffer);
  // to be continued.....
  const date = new Date();
  const filesBaseName = `report_${date.toISOString().slice(0, 10)}--${date.getHours()}-${date.getMinutes()}_`;
  files.map((b, i) => {
    // const tempF = Buffer.from(b);
    const name = filesBaseName + i;
    archive.append(b, {name});
  });

  logger.debug(archive.pointer() + " total bytes");
  archive.finalize();
  outputStreamBuffer.end();
  logger.debug("archiver has been finalized and the output file descriptor has closed.");
  return outputStreamBuffer.getContents();
}

Значением файлов является массив размером два буфера (199000 байт). Когда я отлаживаю его, регистратор пишет «0 байт». и хотя _entriesCount (в отладке) shoes 2 выглядит так, как будто на самом деле нет данных. Более того, когда я смотрю на outputStreamBuffer.getContents (), я получаю «false» вместо реального содержимого zip.

...