首页
编程随笔
Java笔记
Html/Css/Js
Android
后端笔记
服务器搭建
BUG收集
Java异常
Android异常
在线工具
Json格式化
编码/解码
Epub在线编辑
登录
发布文章
个人文章
退出登录
首页
技术教程
BUG收集
在线工具
资源下载
登录
发布文章
退出登录
搜索
当前位置:
首页
-
博客
- 正文
关闭
jszip中的压缩文件比未压缩的大?
更新时间:2022-07-09 10:35:12
阅读数:1080
发布者:落幕
在使用jszip中发现,文件还是保持原有大小,没有压缩 ```javacript 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/ 正如我所看到的,该文件通常与未压缩的文件相同,并且根本不进行压缩。 对于他们网站generate_async()上的情况,默认情况下不压缩,您必须像这样传递压缩选项,并且在他们的网站上调整调用确实有效,如下所示: ```javacript 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()文档解决它: ```javacript 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](https : //github.com/Stuk/jszip/issues/503 "https : //github.com/Stuk/jszip/issues/503")我对该问题发表了评论,建议他们将示例更改为默认使用压缩来帮助避免此问题。我没有为它创建一个单独的问题,但如果你对它充满热情,你可以这样做。