首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript -使用zip.js压缩Blob

javascript -使用zip.js压缩Blob
EN

Stack Overflow用户
提问于 2013-03-07 23:28:58
回答 2查看 12.5K关注 0票数 6

我需要在WebSQl中存储大量文本,因此我决定使用zip.js压缩文本,并存储压缩后的Blobs

在文档中,您可以按如下方式压缩blob

代码语言:javascript
复制
function zipBlob(filename, blob, callback) {
   // use a zip.BlobWriter object to write zipped data into a Blob object
   zip.createWriter(new zip.BlobWriter("application/zip"), function(zipWriter) {
      // use a BlobReader object to read the data stored into blob variable
      zipWriter.add(filename, new zip.BlobReader(blob), function() {
         // close the writer and calls callback function
         zipWriter.close(callback);
      });
   }, onerror);
}

虽然这是可行的,但我不明白为什么需要指定文件名。这真的有必要吗?而且,这个文件总是在压缩后被删除吗?

干杯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-19 11:06:57

在这里检查这个答案-它不需要文件名,我打赌它更容易使用。我已经尝试了相当多的javascript压缩/解压缩实现,并被诸如原始数据大小的限制、整体速度、效率等问题刺痛。在javascript中很难找到一个好的压缩/解压缩实现,但值得庆幸的是,这个实现没有让我失望(我已经用过很多次了):

Compressing a blob in javascript

您当前的实现需要文件名,因为它试图与zip保持一致,这样您就可以将其保存到桌面并使用您喜欢的zip实用程序打开它。听起来你的挑战和我的非常相似,我需要在浏览器和服务器的本地存储中保存和恢复压缩的项目。

票数 3
EN

Stack Overflow用户

发布于 2015-04-20 11:02:45

根据此实现,文件名是必需的。如果只是压缩数据,就不需要这样做了,但是zip.js会构建zip文件,这些文件存储的文件必须有文件名。

在您的原始示例中,zipWriter.add()有效地将您的blob转换为新文件并将其添加到压缩包中- "filename“参数是您希望新文件具有的名称。

下面是一个示例,它使用zip.js将多个blobs添加到压缩包中,然后使用FileSaver.js下载:

代码语言:javascript
复制
function zipBlob() {
    zip.createWriter(new zip.BlobWriter("application/zip"), function(writer) {
        files = ["abcd", "123"];
        var f = 0;

        function nextFile(f) {
            fblob = new Blob([files[f]], { type: "text/plain" });
            writer.add("file"+f, new zip.BlobReader(fblob), function() {
                // callback
                f++;
                if (f < files.length) {
                    nextFile(f);
                } else close();
            });
        }

        function close() {
            // close the writer
            writer.close(function(blob) {
                // save with FileSaver.js
                saveAs(blob, "example.zip");
            });
        }

        nextFile(f);

    }, onerror);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15275068

复制
相关文章

相似问题

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