Node.js readFileSync ZIP文件

时间:2015-12-15 09:22:56

标签: node.js

我正在尝试读取ZIP文件并将其输出到浏览器,获取页面上显示的代码并将其另存为ZIP文件

fs.readFileSync('/dir/file.zip','utf-8')

当我这样做时,我得到以PK�coG���^�*filename.txt开头的输出并继续一段时间。当我将生成的文本保存为file.zip时,我无法提取文件。它说它的损坏或不是有效的ZIP文件。

如果我在Notepad ++中打开一个非常相似的文件,则开始和结束非常相似。我错过了一些明显的东西吗?

任何想法如何获取ZIP文件的内容,保存它以便我只能使用fs.readFileSync函数提取它?

3 个答案:

答案 0 :(得分:0)

您需要将nodejs的zlib模块用于这些目的 https://nodejs.org/api/zlib.html#zlib_zlib_createunzip_options

答案 1 :(得分:0)

ZIP是一种二进制文件类型,当您在浏览器中将其作为文本输出并将文本复制粘贴到文本编辑器时,您将无法获得与原始文件中相同的值(可能是Web浏览器将解释它的一些内容作为HTML标签,和/或复制粘贴会破坏一些二进制字符,和/或文本编辑器本身会破坏它们。)

在将文件提供给浏览器时,您应该做的是设置适当的HTTP响应标头,以便浏览器知道它是ZIP并且可以向用户显示文件下载提示。如果您没有发送任何响应标题,浏览器只会将内容显示为没有意义的文本文件。

看看这个有PHP解决方案的问题:

https://stackoverflow.com/a/10817739/245966

基本上,您需要设置适当的Content-TypeContent-Disposition标头,以及(可选)Content-Length

setResponseHeader('Content-Disposition: attachment; filename=myfile.zip');
setResponseHeader('Content-Type: application/zip');
setResponseHeader('Content-Length: ' + fileLengthInBytes);

setResponseHeader替换为对您设置响应标头的HTTP框架的适当调用。

答案 2 :(得分:0)

您正在尝试将zip文件读取为字符编码(utf-8),该文件应该更改为“二进制”