如何使用jszip库压缩文件

我正在使用HTML5和jquery for mobile进行离线应用程序。 我想使用jszip备份本地存储中的文件。 下面是我所做的代码片段……

if (localStorageKeys.length > 0) { for (var i = 0; i < localStorageKeys.length; i++) { var key = localStorageKeys[i]; if (key.search(_instrumentId) != -1) { var data = localStorage.getItem(localStorageKeys[i]) var zip = new JSZip(); zip.file(localStorageKeys[i] + ".txt", data); var datafile = document.getElementById('backupData'); datafile.download = "DataFiles.zip"; datafile.href = window.URL.createObjectURL(zip.generate({ type: "blob" })); } else { } } } 

在上面的代码中循环遍历localstorage内容并以文本格式保存ezch文件。 面临的挑战是如何在DataFiles.zip中创建多个文本文件,因为目前只能在压缩文件夹中创建一个文本文件。 在我的问题中,我对javascript的新手是如此的暧昧。 提前致谢。

只需继续调用zip.file()

查看他们的文档页面中的示例(评论我的):

 var zip = new JSZip(); // Add a text file with the contents "Hello World\n" zip.file("Hello.txt", "Hello World\n"); // Add a another text file with the contents "Goodbye, cruel world\n" zip.file("Goodbye.txt", "Goodbye, cruel world\n"); // Add a folder named "images" var img = zip.folder("images"); // Add a file named "smile.gif" to that folder, from some Base64 data img.file("smile.gif", imgData, {base64: true}); var content = zip.generate(); location.href="data:application/zip;base64,"+content; 

重要的是要了解您编写的代码 – 了解每行的作用。 如果你这样做,你会发现你只需要再次调用zip.file()来添加另一个文件。

添加到@Jonathon Reinhart的回答,
您还可以同时设置文件名和路径

 // create a file and a folder zip.file("nested/hello.txt", "Hello World\n"); // same as zip.folder("nested").file("hello.txt", "Hello World\n"); 

如果您收到文件列表(来自ui或数组或其他),您可以先进行压缩然后归档。 代码是这样的:

 function upload(files){ var zip = new JSZip(); let archive = zip.folder("test"); files.map(function(file){ files.file(file.name, file.raw, {base64: true}); }.bind(this)); return archive.generateAsync( { type: "blob", compression: "DEFLATE", compressionOptions: { level: 6 } }).then(function(content){ // send to server or whatever operation }); } 

这对我来说有多个json文件。 也许有帮助。