在Node.js中读取ZIP文件

时间:2015-12-15 17:27:51

标签: javascript node.js

我可以访问网站进行测试。我知道网站的代码,并使用所有者权限进行测试。代码类似于下面的

var something= "{USER INPUT}'
result = eval((something));

所以使用SSJS我可以修改它以有效阅读

var something= "fs.readFileSync('/somewhere/file.txt',null)"
result = eval((something));

这将内容输出到屏幕下方的屏幕,这很好。但是,在ZIP文件上执行相同的操作会给我所有奇怪的字符,例如

PK�coG���^�*file.txt

现在,该文件看起来非常接近我拥有的本地ZIP文件。它从PK开始,包含文件名。但是,在Node版本中,有很多空方框和带问号的黑框。

有关如何正确获取ZIP文件内容的任何建议吗?

2 个答案:

答案 0 :(得分:0)

我建议你使用ChildProcess exec函数来运行gzip命令并在之后读取它。

答案 1 :(得分:0)

如果您希望解压缩实际的.ZIP文件,zlib.gunzip().unzip()将失败并显示错误的标题检查"错误,因为他们并不打算使用.ZIP文件。 ZIP文件往往是捆绑目录,而gzip通常只适用于单个文件(有人请注释/更正,如果我关闭它)。另请参阅How are zlib, gzip and Zip related? What are is common and How are they different?

如果您正在使用.ZIP,那么有一些模块专门用于此目的。一个例子是node-unzip

const fs = require('fs');
const unzip = require('node-unzip');

fs.createReadStream('path/to/some.zip').pipe(unzip.Extract({ path: 'output/path' }));

如果确实想要对zlib做些什么,那么你会想要这样的事情:

const zlib = require('zlib');

zlib.unzip('./src/slow.jpg.gz', (err, data) => {
  if (err) throw err;
  // do something with the data
});

另外,对于#eval() - >您应该非常小心。 Why is using the JavaScript eval function a bad idea?