js文件流导出下载

2023-02-26 445 0

  • 后台返回的是二进制流数据,前端需要转换后下载
/**
 * 文件流下载导出
 * @param {Object} url	请求地址
 * @param {Object} method	GET / POST请求
 * @param {Object} formData 请求参数
 * @param {Object} fileName 自定义文件名称
 * @param {Object} contentType 
 */
function handleBlobFile(url,method,formData,fileName,contentType) {
    let params = '';
    if(typeof formData === 'string') {
	params = formData;
    }else {
	for(let i in formData) {
	    params += i+'='+formData[i]+'&';
	}
	params = params.substring(0,params.length - 1);
    }
    method == 'get' ? url = url+'?'+params : url;
    let xhr = new XMLHttpRequest();
    xhr.open(method,url, true);
    xhr.responseType = "blob";
    xhr.setRequestHeader('accessToken', accessToken);
    if(contentType) {
	xhr.setRequestHeader('Content-type',contentType);
    }else {
	xhr.setRequestHeader('Content-Type', 'application/x-www-form-     urlencoded');
    }
	
    xhr.onload = function() {
	if (this.status == 200) {
	    var blob = this.response;
	    if(blob.type == "text/html"){
		return false;
	    }
	    // 文件名称设置
	    var _fileName = fileName;
			
	    if(window.navigator.msSaveOrOpenBlob){            // IE浏览器下
	        navigator.msSaveBlob(blob, _fileName);
	    } else {
	        var  link = document.createElement("a");
	        link.href = window.URL.createObjectURL(blob);
	        link.download = _fileName;
	        link.click();
	        window.URL.revokeObjectURL(link.href);
	    }
        }else{
	    alert('文件下载失败!');
	}
    }
    // 发送ajax请求
    method == 'get' ? xhr.send() : xhr.send(params);
}

相关文章

JavaScript数组去重
JavaScript 数组方法(三)
JavaScript 数组方法(二)
JavaScript 数组方法(一)
JS身份证精确校验
前端js实现打包下载文件

发布评论