[英]Using jQuery and iFrame to Download a File
我有以下代碼下載.csv
文件:
$.ajax({
url: urlString,
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
success: function(data) {
if (data) {
var iframe = $("<iframe/>").attr({
src: data,
style: "visibility:hidden;display:none"
}).appendTo(buttonToDownloadFile);
} else {
alert('Something went wrong');
}
}
});
urlString
指向Restful服務,該服務生成.csv
文件並返回分配給iFrame的src屬性的文件路徑。 這適用於任何.csv
文件,但我遇到.xml
文件的問題。
當我使用相同的代碼但將contentType
更改為text/xml
並使用它來下載.xml
文件時,這不起作用。
我可以在這里使用相同的方法來處理.xml
文件嗎?
更新:
感謝Ben指出了正確的方向。 事實證明我根本不需要ajax調用。 相反,我可以使用iFrame及其url屬性來調用Web服務,它將生成內容,添加標題( Content-Disposition
),然后返回流。
您也可以從虛擬錨元素下載它,即使數據是客戶端:
/*
* Create an anchor to some inline data...
*/
var url = 'data:application/octet-stream,Testing%20one%20two%20three';
var anchor = document.createElement('a');
anchor.setAttribute('href', url);
anchor.setAttribute('download', 'myNote.txt');
/*
* Click the anchor
*/
// Chrome can do anchor.click(), but let's do something that Firefox can handle too
// Create event
var ev = document.createEvent("MouseEvents");
ev.initMouseEvent("click", true, false, self, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
// Fire event
anchor.dispatchEvent(ev);
我猜測問題是大多數瀏覽器會嘗試在瀏覽器中呈現XML,而他們往往沒有CSV處理程序,所以他們會自動默認提示用戶下載文件。 嘗試修改XML文件的標頭以強制下載。 像(PHP示例):
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition: attachment; filename="some filename"');
這應該告訴大多數瀏覽器不要嘗試打開文件,而是讓用戶下載文件並讓操作系統確定如何處理它。
如果您無權控制XML文件本身的標頭,則可以嘗試使用服務器端腳本進行解決。 使用JS將URL傳遞給服務器端腳本:
//build the new URL
var my_url = 'http://example.com/load_file_script?url=' + escape(path_to_file);
//load it into a hidden iframe
var iframe = $("<iframe/>").attr({
src: my_url,
style: "visibility:hidden;display:none"
}).appendTo(buttonToDownloadFile);
在服務器端(您的http://example.com/load_file_script
腳本),您使用cURL
/ file_get_contents
/ wgets
/ [獲取遠程文件的其他一些機制]來獲取遠程文件的內容,添加Content-Disposition: attachment
標題,並print
原始文件的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.