关于JS触发浏览器流文件下载的方式

前面大家也看到了,我比较喜欢用form提交来下载,虽然会带来一个标签页的问题,但是form支持POST方式提交,传参比GET方式要好用一些,特别是在body里传参数可以不用考虑编码问题,在一些汉字等特殊字符场景中有优势。
如果不用考虑编码方案或者有好的解决方案,仅用query和params就足够的话,那么可以用GET方式的A元素点击或者iframe元素加载来触发浏览器下载。个人推荐iframe方式,基本上这种加载的方式浏览器不会阻止,而A元素模拟点击可能有被浏览器拦截的情况。还有就是注意GET方式是支持缓存的,如果下载还需要SSE通道通知前端,那么注意规避缓存,可以采用在url中附加随机参数来解决。
下面给出一个iframe下载的简单demo

function myFuncDownload(filename) {
	let iframe = document.createElement('iframe');
	iframe.src = '/fs/getfile/'+myencode(filename)+"/" + new Date().getTime();
	iframe.style.display = 'none';
	document.body.appendChild(iframe);
	iframe.addEventListener('load', function() { document.body.removeChild(iframe); });
}

这个是采用params传参,带上了时间戳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值