日常记录:js(XMLHttpRequest)下载服务器文件

最近做登录认证,想把token统一方法header里面,不想放到url上,所以写了这个js,并且添加到jquery里面。

/**
 * add 2022-09-09 sakyoka
 * 下载 
 */
(function ($) {
	
	/**
	 * 默认成功处理方法
	 */
	var successDefault = function(response, xhr, fileName){
		
		var disposition = xhr.getResponseHeader("Content-Disposition");
		if (fileName == undefined && disposition){
			fileName = disposition.split("=")[1];
		}
		
		if (fileName == undefined || fileName == ''){
			AlertMessgaeUtils.alert({id:'tips', title:'提示', content: '请设置下载文件名称'});
			return ;
		}
		
		var link = document.createElement('a');
		link.href = URL.createObjectURL(response);
		link.download = fileName;
		link.style.display = 'none'; 
		document.body.appendChild(link);
		link.click();
		link.remove();		
	}
	
	/**
	 * 默认下载前
	 */
	var beforeDefault = function(){
		AlertMessgaeUtils.alert({id:'downloading', title:'提示', content: '下载文件中...', hiddenClose: true});
	}
	
	/**
	 * 默认完成后
	 */
	var completeDefault = function(){
		AlertMessgaeUtils.hide('downloading');
		AlertMessgaeUtils.alert({id:'downloaded', title:'提示', content: '下载完毕.'});
	}
	
	$.download = function(config){
		config = config || {};
		var medhod = config.method || 'get';
		var headers = config.headers || {};
		var requestUrl = config.url;
		var async = config.async || true;
		var fileName = config.fileName;
		var success = config.success;
		var error = config.error;
		var beforeSend = config.beforeSend;
		var complete = config.complete;
		
		var xhr = new XMLHttpRequest();
		xhr.open(medhod, requestUrl, async);
		xhr.responseType = 'blob';
		for (var k in headers){
			xhr.setRequestHeader(k, headers[k]);
		}
		
		xhr.onload = function(){
			var data = xhr.response;
			if (success){
				success(data, xhr, fileName);
			}else{
				successDefault(data, xhr, fileName);
			}			
		}
		
		xhr.onloadstart = function(){
			if (beforeSend){
				beforeSend();
			}else{
				beforeDefault();
			}
		}
		
		xhr.onloadend = function(){
			if (complete){
				complete();
			}else{
				completeDefault();
			}
		}
		
		xhr.onerror = function(){
			if (error){
				error(xhr);
			}
		}
		
		xhr.send();
	}
	
})($);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值