我使用此代码从服务器下载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