Javascript 實現一個post方式的檔案下載

田小菜發表於2019-09-16

實現一個post方式的檔案下載

  • 廢話不多說,上程式碼
    function export() {
        let url = 'url';
    	// responseType 設定返回二進位制流
        this.$ajax.post(url, {id: 1234}, {responseType: 'arraybuffer'}).then(res => {
    	// 獲取二進位制流長度
    	let bytes = new Uint16Array(res);
    	let len = bytes.byteLength;
    	    // 與後臺確認,當<= 82時,無許可權
        	if (len <= 82) { //  返回json格式時  
       	        let result = arrayBufferToString(res); // buffer ==> base64字串
        		let strResult = JSON.parse(result);
        		console.log(strResult); // 得到解析好的json
        	} else {
        		let blob = new Blob([res], {type: "application/vnd.ms-excel"}); // 檔案轉化成二進位制檔案
        		let objectUrl = URL.createObjectURL(blob); //轉化成url
        		// 很多瀏覽器可能會牆掉彈窗,導致你的檔案沒法正常下載,所以我們用a標籤的形式來下載
        		let a = document.createElement('a');
        		document.body.appendChild(a);
        		a.setAttribute('style', 'display:none');
        		a.setAttribute('href', objectUrl);
        		a.setAttribute('download', '事件列表.xlsx'); // 設定檔名
        		a.click();
        		URL.revokeObjectURL(objectUrl); // 下載檔案
        	}
        })
    }
    
    function arrayBufferToString(buffer) {
    	// buffer ==> base64字串
    	let str = String.fromCharCode.apply(null, new Uint8Array(buffer));
    	// base64字串解碼
    	return decodeURIComponent(escape(str));
    }
複製程式碼

相關文章