Javascript 实现一个post方式的文件下载

209 阅读1分钟

实现一个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));
    }