我已經能夠編寫JavaScript導致瀏覽器使用這樣的代碼遠程服務器下載文件:如何讓瀏覽器下載存儲在JavaScript字符串中的文件?
var iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.src = "filename.zip"
document.body.appendChild(iframe);
偉大的工程。但是,現在我有一種不同的情況,在瀏覽器端JavaScript文件的內容存儲在字符串中,我需要觸發該文件的下載。我試圖取代以上這三線,其中「myFileContents」是包含該文件的實際字節字符串:
iframe.src = "data:application/octet-stream;base64," + Base64.encode(myFileContents);
這得到下載的文件,但文件名丟失。在Chrome中,文件名稱只是「下載」。另外我讀過一些瀏覽器版本允許的文件大小限制。
有沒有辦法做到這一點?使用JQuery可以。該解決方案需要支持任何類型的文件 - ZIP,PDF,CSV,PNG,JPG,XLS等...
謝謝。我確實發現了另一篇文章,其中有人提到了將文件內容和文件名發佈到Web服務器的技巧,然後讓它通過Content-disposition標題返回完整響應。一個示例實現在這裏:https://code.google.com/p/download-data-uri/。由於冗餘傳輸的性能問題,我試圖避免這種方法。我會嘗試'a.download'技巧,並研究哪些瀏覽器支持它。謝謝。 – 2013-05-09 14:49:10
您的解決方案在Chrome中運行得非常好,但目前無法在任何其他瀏覽器中使用。我接受這個答案,直到有更好的建議。我在想,可能還有一種方法可以使用iframe技巧來處理某種假阿賈克斯帖子和假響應,但我不知道該怎麼做。 – 2013-05-22 20:02:48
您可以使用'var clickEvent = document.createEvent(「MouseEvent」);而不是'a.click()'; clickEvent.initEvent(「click」,true,true); a.dispatchEvent(clickEvent); '使其可以在Firefox和Chrome中運行 – 2013-05-22 21:57:12