我需要在WebSQl中存储大量文本,因此我决定使用zip.js压缩文本,并存储压缩后的Blobs
在文档中,您可以按如下方式压缩blob
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);
}虽然这是可行的,但我不明白为什么需要指定文件名。这真的有必要吗?而且,这个文件总是在压缩后被删除吗?
干杯
发布于 2013-06-19 11:06:57
在这里检查这个答案-它不需要文件名,我打赌它更容易使用。我已经尝试了相当多的javascript压缩/解压缩实现,并被诸如原始数据大小的限制、整体速度、效率等问题刺痛。在javascript中很难找到一个好的压缩/解压缩实现,但值得庆幸的是,这个实现没有让我失望(我已经用过很多次了):
Compressing a blob in javascript
您当前的实现需要文件名,因为它试图与zip保持一致,这样您就可以将其保存到桌面并使用您喜欢的zip实用程序打开它。听起来你的挑战和我的非常相似,我需要在浏览器和服务器的本地存储中保存和恢复压缩的项目。
发布于 2015-04-20 11:02:45
根据此实现,文件名是必需的。如果只是压缩数据,就不需要这样做了,但是zip.js会构建zip文件,这些文件存储的文件必须有文件名。
在您的原始示例中,zipWriter.add()有效地将您的blob转换为新文件并将其添加到压缩包中- "filename“参数是您希望新文件具有的名称。
下面是一个示例,它使用zip.js将多个blobs添加到压缩包中,然后使用FileSaver.js下载:
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);
}https://stackoverflow.com/questions/15275068
复制相似问题