天天看點

JS使用技巧-如何解決谷歌浏覽器下載下傳圖檔、PDF文檔時隻打開不下載下傳的問題?

問題描述:

頁面下載下傳跨域的圖檔、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頁打開了

繼續閱讀