File size: 1,576 Bytes
7cf32bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var archiver = require('archiver');
var fs = require('fs');
var os = require('os');
var path = require('path');

module.exports = (file, io, data) => {
  // Use os.tmpdir() to get the system's temporary directory
  var tempDir = os.tmpdir();
  
  // Construct the path for the zip file in the temp directory
  var outputPath = path.join(tempDir, file + '.zip');
  
  var output = fs.createWriteStream(outputPath);
  var archive = archiver('zip', {
    zlib: { level: 9 } // Sets the compression level.
  });

  // listen for all archive data to be written
  output.on('close', function() {
    console.log(archive.pointer() + ' total bytes');
    console.log('archiver has been finalized and the output file descriptor has closed.');
    io.emit(data.token, { progress: "Completed", file: outputPath });
  });

  // This event is fired when the data source is drained no matter what was the data source.
  output.on('end', function() {
    console.log('Data has been drained');
  });

  // good practice to catch warnings (ie stat failures and other non-blocking errors)
  archive.on('warning', function(err) {
    if (err.code === 'ENOENT') {
      // log warning
    } else {
      // throw error
      throw err;
    }
  });

  // good practice to catch this error explicitly
  archive.on('error', function(err) {
    throw err;
  });

  // pipe archive data to the file
  archive.pipe(output);

  // append files from a sub-directory and naming it `new-subdir` within the archive
  archive.directory('./' + file, false);

  // finalize the archive
  archive.finalize();
}