2012-10-20 84 views
3

我正在使用JSZip在頁面上捆綁一組圖像,並創建一個zip文件來存儲它們。以下是相關功能:使用JSZip下載崩潰瀏覽器的圖像

// Make a zip file 
$("#snapLink").click(function() { 
    var zip = new JSZip(); 
    snapFolder = zip.folder("snaps") 
    $("#snapRandom img").each(function(index){ 
    imageLink = $(this).attr('src').substring(22); 
    snapFolder.file("snap" + index + ".png", imageLink, {base64: true}); 
    }) 
    snapZip = zip.generate(); 
    location.href="data:application/zip;base64,"+snapZip; 
}); 

圖像是從畫布生成的,因此它們不在文件系統中。圖片來源是數據網址。

這個工程很棒,如果有1-3個圖像下載。一旦有超過10個圖像的瀏覽器崩潰,它肯定會崩潰。我已經在Mac上的Safari和Chrome上測試了這一點。圖像大約是120k。

對於如何使這項工作有什麼想法嗎?提前致謝!

+0

整個瀏覽器崩潰還是隻是選項卡? –

+0

在Safari中,整個瀏覽器崩潰。在Chrome中,它就是這個標籤。 –

回答

1

我有同樣的問題,以防萬一其他人想知道,我在這裏發佈解決方案。

答案竟是網站:https://stuk.github.io/jszip/documentation/howto/write_zip.html

zip.generateAsync({type:"blob"}) 
.then(function (blob) { 
    saveAs(blob, "hello.zip"); 
}); 

就這麼簡單。包含FileSaver.js並使用blob而不是base64。

該錯誤是由href上的字符限制引起的。

在Chrome目前的網址長度上限爲2097152個字符

我最初以爲我們不得不使用的base64保存壓縮文件,因爲圖像是用base64。謝天謝地,我們可以將它保存爲一個blob並獲得1.5Mb-ish限制