首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jszip中压缩的文件比未压缩的内容大

jszip中压缩的文件比未压缩的内容大
EN

Stack Overflow用户
提问于 2019-09-10 15:44:50
回答 1查看 1.2K关注 0票数 3

有人能解释一下,怎么可能,jszip没有压缩文件?我正在尝试使用压缩,压缩后的zip文件大小大于里面未压缩文件的大小。我做错了什么吗?

代码语言:javascript
运行
复制
var fs = require("fs");
var JSZip = require("jszip");

var zip = new JSZip();
zip.file('try.txt', 'Hello World ');

zip.generateNodeStream({type:'nodebuffer',streamFiles:true}).pipe(fs.createWriteStream('out.zip')).on('finish', function () {
    // JSZip generates a readable stream with a "end" event,
    // but is piped here in a writable stream which emits a "finish" event.
    console.log("out.zip written.");
});

在下载示例时,我在官方页面上也看到了这个问题。https://stuk.github.io/jszip/

正如我所看到的,这个文件通常和未压缩的文件是一样的,而且它根本不做压缩。

EN

Stack Overflow用户

回答已采纳

发布于 2019-09-10 21:12:38

好的,我按照你的建议看了他们网站上的例子。我制作了一个明显可压缩的文件,就像我在评论中建议的那样(你也跟进了),下载了一个100KB的文件,显然是未压缩的。然后我用windows和7zip将其解压缩并重新压缩,结果得到了一个大约1KB的文件。您绝对是对的,jszip自己的示例就是创建一个未压缩的zip。

对于他们网站上的情况,默认情况下generate_async()不会压缩,你必须像这样pass compression options,并且调整他们网站上的调用确实有效,如下所示:

代码语言:javascript
运行
复制
var zip = new JSZip();
zip.file("Hello.txt", "11111111 I had a bunch more 1s that I removed\n");
var img = zip.folder("images");
img.file("smile.gif", imgData, {base64: true});
zip.generateAsync({type:"blob",
    /* NOTE THESE ADDED COMPRESSION OPTIONS */
    /* deflate is the name of the compression algorithm used */
    compression: "DEFLATE",
    compressionOptions: {
         /* compression level ranges from 1 (best speed) to 9 (best compression) */
        level: 9
    }})
.then(function(content) {
    // see FileSaver.js
    saveAs(content, "example.zip");
});

同样,对于您的呼叫,我认为添加类似的选项应该可以根据generateNodeStream()文档解决问题:

代码语言:javascript
运行
复制
zip.generateNodeStream(
    {type:'nodebuffer',streamFiles:true,compression: "DEFLATE", compressionOptions: {level: 9}}
).pipe(fs.createWriteStream('out.zip')).on('finish', function () {
    // JSZip generates a readable stream with a "end" event,
    // but is piped here in a writable stream which emits a "finish" event.
    console.log("out.zip written.");
});

而且,你也不是第一个有这个问题的人。这是另一位在github上落入同样陷阱的用户:https://github.com/Stuk/jszip/issues/503,我对这个问题发表了评论,建议他们将示例更改为默认使用压缩,以帮助避免此问题。我没有为它创建一个单独的问题,但如果你对它充满热情,你可以这样做。

票数 6
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57866209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档