我使用此代碼從服務器下載excel文件。使用blob從ajax結果下載文件
$.ajax({
headers: CLIENT.authorize(),
url: '/server/url',
type: 'POST',
contentType: "application/json; charset=utf-8",
data: JSON.stringify(jsonData),
success: function (data) {
alert('Data size: ' + data.length);
var blob = new Blob([data], { type: "application/vnd.ms-excel" });
alert('BLOB SIZE: ' + data.length);
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
document.location = downloadUrl;
},
});
的問題,我的經驗是,即使數據和斑點大小是相同的,那一刻document.location被分配提示我下載almoste兩次較大的Excel文件。當我嘗試打開它時,excel抱怨錯誤的文件格式,打開的文件包含大量垃圾,即使所需的文本仍然存在。
任何想法是什麼導致這一點,以及如何避免它?
我不認爲這是一個好主意。爲什麼不讓服務器將文件推送到瀏覽器以獲得正常的下載流。這看起來非常不自然,除非你有一個非常具體的理由來做這件事,比如某種代理或者在線分析,但是它只是鞭策瀏覽器memeory。 – ppumkin 2015-04-01 14:36:34
嘗試設置內容類型爲'arrayBuffer' – levi 2015-04-01 14:50:41
@ppumkin,不幸的是我需要滿足要求。我無法在服務器上存儲文件,我需要通過授權標題才能獲取文件。 – SMart 2015-04-01 15:00:33