這是一個以各種不同方式提出的常見問題,我收集了一些下面的鏈接並解釋了爲什麼它們不起作用。我正在尋找完整的解決方案以下。AJAX(或AJAX式)文件下載
在我開發有需要AJAX式的文件下列要求
- 用戶下載可以點擊鏈接下載文件並沒有被定向到一個新的頁面的Web應用程序,將會收到一個正常的「另存爲..」對話框,我們都習慣在網頁瀏覽器中下載文件
- 如果由於某種原因服務器無法提供文件,應該調用一個javascript回調函數。同樣地,如果服務器成功地擔任了該文件
- 需要能夠修改HTTP 請求頭指定,例如,在請求中的Content-Type HTTP頭
- 支持跨所有A優級瀏覽器
事情到目前爲止研究:
一個。 jquery.fileDownload通過使用表單提交,隱藏的iframe和讓服務器設置特定的cookie的組合,非常優雅地解決了需求1,2和4。我對這個項目非常熟悉(也貢獻了它)。要求3不受支持,因爲HTML表單提交和iframe(該庫使用的)不允許爲請求的服務器資源指定HTTP標頭。 (jdownloader也使用類似的iframe/form技術,但它也不解決要求3)。
b。它可以使用XMLHttpRequest的(各種黑客針對不同的瀏覽器(link 1,link 2,link 3,link 4,link 5,link 6,link 7,link 8)從文件中檢索二進制數據,但他們沒有滿足要求1.二進制數據可以保存在一個javascript變量中,但無法調用瀏覽器的「另存爲...」對話框,以允許用戶將此二進制數據保存到其硬盤上的文件中
c。This link(under 「下載並保存到HTML5文件系統的文件」標題)有一個完整的端到端解決方案,使用XHR2並滿足要求1,2和3.但它得不到支持(u很新的HTML5 FileWriter)。
那裏有任何完整的解決方案?
編輯 我們有一些更多的選擇 - 我計劃測試。也許唯一的選擇是通過收集所有黑客/解決方案來爲這個問題開發一個庫,以創建一個通用的解決方案。
根據FIBERTECH的溶液如下:使用溶液(b)中保存文件到變量,然後:
對於Internet Explorer:保存使用IE的的execCommand()
對於其他這樣的數據:使用data uris(link 2)和<的HTML5 下載屬性>標籤指定名稱(link 1,link 2,link 3,link 4)
This link提到事做用帆布的文件下載能力
所以將結合從溶液(B)我與原來的問題你IE技術和其他瀏覽器的數據URI解決了這個問題? – Hooloovoo13 2013-02-13 14:51:19