正在使用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的新手是如此的暧昧。 提前谢谢。
答案 0 :(得分:10)
继续致电zip.file()
。
查看他们documentation page的例子(我的评论):
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()
来添加另一个文件。
答案 1 :(得分:0)
添加@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");
答案 2 :(得分:0)
如果您收到文件列表(来自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文件。也许有帮助。
答案 3 :(得分:0)
如果要压缩文件并需要base64输出,可以使用以下代码-
import * as JSZip from 'jszip'
var zip = new JSZip();
zip.file("Hello.json", this.fileContent);
zip.generateAsync({ type: "base64" }).then(function (content) {
const base64Data = content