adm-zip: Zip file is empty - sort of...

Hi,

I’ve been wrestling with this issue for the last 2 hours and am convinced that I must be doing something woefully dumb.

I am trying to create a zip archive that contains exactly 1 file - a text (log) file. Shown below is my latest attempt, but I also tried the addLocalFile method described in the documentation.

In all cases the result is the same:

  1. The zip file is created
  2. When I point a web browser to it to cause standard browser download behavior, the zip file appears to be properly downloaded.
  3. But when I open the archive in Windows Explorer (Windows 2012 Server) either using standard Windows filesystem logic, or using 7-Zip, the zip is empty. Specifically,
  • In Explorer the zip file shows a length of 67K
  • When I double-click on it, it opens to the next level, showing the filename that I assigned, but it shows a type of “File Folder”
  • When I double-click again, it says “This folder is empty”

I should also point out that within the Linux (CentOS 6) shell, I can run the unzip command against the archive and it all works as expected.

So either I’m doing something wrong, or is there some dependency on Windows?

Thanks very much for your help.

-Paul

    fs.readFile(fqLogPath, function (err, buffer) {
            if (err)
            {
                console.log('FAILURE')
                return;
            }

            var zip = new AdmZip();
            zip.addFile(uniqueId + '.txt', buffer);
            zip.writeZip(__dirname + '/public/' + uniqueId + '.zip');
    });

About this issue

  • Original URL
  • State: open
  • Created 8 years ago
  • Reactions: 9
  • Comments: 17

Most upvoted comments

@niczak Yeah, that’s one of the way you can achieve it, but better one is, add following code in adm-zip.js code.

if (!attr) {

     if (entry.isDirectory)  {

		attr = (040755 << 16) | 0x10;
	}

           else {

	         attr = 0644 << 16;

	}

 }	

Hi guys i’m actually running into this issue to. Fighting with adm-zip for hours without much result. This problem seems to only occurs in a Windows environment.

For what it’s worth, here are the steps to reproduce it :

  1. Setup a new nodejs project with some dependencies adm-zip (and in my case bluebird but this is not required) put some random source files in an “input” folder
  2. write down the following code in a js file :
"use strict";

const Promise = require("bluebird");
const path = require("path");
const fs = Promise.promisifyAll(require("fs"));
const AdmZip = require("adm-zip");

const inputDirectory = path.join(__dirname, "input");
const zip = new AdmZip();

fs.readdirAsync(outputDirectory)
    .map(file => zip.addLocalFile(path.join(inputDirectory, file)))
    .then(() => zip.writeZip(path.join(__dirname, "latest.zip")));
  1. run the script
  2. open the new generated archive “latest.zip” and see entries as empty folders 😕

Running into this issue as well. I personally use WinRar and it’s able to see the files, but other windows users are not. I was hoping this was a format issue that could be changed in the constructor. But since there’s no replies perhaps this is an unresolved issue.

If that’s the case then this is a deal breaker and I’ll need to find another library.

Here is how I got around this issue:

var zip = new ADMZip();
var input = fs.readFileSync(pathToCSV);
zip.addFile('file_name_here.csv', input, '', 0644);
zip.writeZip(pathToZip);

^— Works on Linux, OSX, Windows.

@niczak buffer (binary)