关于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传参,带上了时间戳

你可能感兴趣的:(javascript,前端,node.js,edge浏览器)