Come comprimere i file usando la libreria jszip

Sto lavorando su un’applicazione offline usando HTML5 e jquery per dispositivi mobili. Voglio eseguire il backup dei file dalla memoria locale usando jszip. di seguito è riportato un frammento di codice di ciò che ho fatto …

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 { } } } 

nel codice sopra sto scorrendo il contenuto della memoria locale e salvando il file ezch in un formato di testo. la sfida che sto affrontando è come creare diversi file di testo all’interno di DataFiles.zip in quanto attualmente sono in grado di creare un solo file di testo all’interno della cartella zippata. Sono nuovo di javascript così nudo con qualsiasi ambiguità nella mia domanda. Grazie in anticipo.

Continua a chiamare zip.file() .

Guarda l’esempio dalla loro pagina di documentazione (commenti miei):

 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; 

L’importante è capire il codice che hai scritto: impara cosa fa ogni linea. Se lo fai, ti rendi conto che devi solo chiamare nuovamente zip.file() per aggiungere un altro file.

Aggiunta alla risposta @Jonathon Reinhart,
È anche ansible impostare sia il nome del file che il percorso allo stesso tempo

 // 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"); 

Se si riceve un elenco di file (da ui o array o qualsiasi altra cosa) è ansible effettuare un comprimere prima e quindi archiviare. Il codice è qualcosa del genere:

 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 }); } 

questo ha funzionato per me in più file json. Forse aiuta.