2013-08-01 70 views
4

我正在使用HTML5和jQuery for mobile的離線應用程序工作。我想使用jszip從本地存儲備份文件。下面是我所做的代碼片段...如何使用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來說,我都很陌生。 在此先感謝。

回答

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()添加另一個文件。

+0

@Jonathon ...非常感謝..它工作完美。你已經向我解釋過,就像我是一個兩歲的孩子,並且滿意。再次感謝 – JoseLuke

+0

你在變量imgData中存儲什麼?因爲我試圖達到相同的結果,但寫入一個MP3。 –

+1

@EduardoLaHozMiranda在這種情況下,它將是一個原始的GIF圖像,Base64編碼。你想使用第一種形式,它只是原始的字符串數據。 –

0

添加到@Jonathon萊因哈特的回答,
您還可以在同一時間

// 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"); 
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文件。也許它有幫助。

相關問題