問題描述:
頁面下載下傳跨域的圖檔、pdf檔案,浏覽器總是自動打開,并且在下載下傳清單裡面不顯示。
如何解決谷歌浏覽器下載下傳圖檔、PDF文檔時隻打開不下載下傳的問題?如何變成直接下載下傳?
解決方法:
使用js擷取下載下傳流,重新生成本地下載下傳連結,再觸發下載下傳事件,代碼如下:
function getFile(url,fileName){
var httpRequest = new XMLHttpRequest();
//指定響應類型,這決定了浏覽器對傳回内容的解析方式,設定為空或者text會作為字元解析、json會作為json解析,blob和arraybuffer會作為位元組流解析
httpRequest.responseType ='arraybuffer';
httpRequest.open('GET', url, true);
httpRequest.onload = function () {
if (httpRequest.readyState == 4 && httpRequest.status == 200) {
//隻有responseType為空或者text,才會使用responseText擷取内容,其他情況 httpRequest.response就是你需要的不含http頭的傳回内容
var content = httpRequest.response;
var elink = document.createElement('a');
elink.download = fileName;
elink.style.display = 'none';
var blob = new Blob([content]);
//建立指向記憶體中位元組流的連結
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
}
};
httpRequest.send();
}
親測可用,在谷歌浏覽器點選圖檔和pdf,就可以顯示下載下傳内容,而不是在新tab頁打開了