a標籤下載txt,會直接打開txt文件的處理方法

一、href + download方法

通常在咱們寫項目的時候會遇到上傳下載什麼的,在上傳完文件後會把文件的路徑保存到數據庫裏以便下載,如果想不通過後臺直接下載的話,可以把文件路徑給a標籤的屬性href;

<a href="/attachment/xxxx.txt">下載</a>

這樣當用戶打開瀏覽器點擊鏈接的時候就會直接下載文件。
但是有個情況,比如txt,png,jpg等這些瀏覽器支持直接打開的文件是不會執行下載任務的,而是會直接打開文件,這個時候就需要給a標籤添加一個屬性“download”;

<a href="/attachment/xxxx.txt" download="filename.txt">下載</a>

這裏download也可以不寫任何信息,會自動使用默認文件名。
在這裏說明一些IE好像不支持,只能通過後臺代碼搞。

二、createElement方法

function download(filename, text) {
  var element = document.createElement('a');
  element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
  element.setAttribute('download', filename);
 
  element.style.display = 'none';
  document.body.appendChild(element);
 
  element.click();
 
  document.body.removeChild(element);
}
 
download("filename.txt","This is the content of my file :)")

這個直接創建的文件可以下載,但是
將element.setAttribute(‘href’, ‘data:text/plain;charset=utf-8,’ + encodeURIComponent(text));
改爲服務端地址如element.setAttribute(‘href’, ‘fileurl’);就不行了

三、form 方法

$('<form method="post" target="_blank" role="form" action="'+data.urlPath+data.fileName+'" hidden="hidden"></form>') .appendTo('body').submit().remove();

四、嘗試XMLHttpRequest方法

function downloadIamge() {  
 var url = "";
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);//get請求,請求地址,是否異步
xhr.responseType = "blob";    // 返回類型blob
xhr.onload = function () {// 請求完成處理函數
	if (this.status === 200) {
		var blob = this.response;// 獲取返回值
		var a = document.createElement('a');
		a.download = 'data.doc';
		a.href=window.URL.createObjectURL(blob);
		a.click();
    }
};
// 發送ajax請求
xhr.send();

}

但是這個好像把事情搞大了,下個文件而已,還得把XMLHttpRequest請來感覺有些大材小用了(並且這裏沒有用到後端接口,沒有設置允許跨域可想而知請求是不可能成功的)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章