a标签download属性失效问题

在uniapp项目开发遇到的下载时a标签download属性失效问题

  href属性的地址必须是和你前端js非跨域的地址,如果引用的是第三方的网站或者说是前后端分离的项目,调用后台的接口,这时download就会不起作用,应该用二进制流下载后改名。

下面是错误示例

 const link = document.createElement('a');
 link.style.display = 'none';
 link.href = i.fileUrl;
//因为没有遵守跨域规则所以download属性失效,应该用二进制流下载下来改名
 link.setAttribute('download', i.fileName);
 document.body.appendChild(link);
 link.click();
 document.body.removeChild(link);

下面是正确的两种方式

	uni.request({
					url: i.fileUrl,
					responseType: 'arraybuffer'
				}).then(res => {
					const blob = new Blob([res[1].data]); // 通过返回的流数据 手动构建blob 流
					
					//方法1
					const a = document.createElement("a");
					//blob:localhost
					a.download = i.fileName;
					a.href = window.URL.createObjectURL(blob);
					document.body.appendChild(a);
					a.click();
					document.body.removeChild(a);

					//方法2
					// const reader = new FileReader();
					// reader.readAsDataURL(blob); // 转换为base64,可以直接放入a标签的href
					// reader.onload = (e) => {

					// 	// 转换完成,创建一个a标签用于下载
					// 	const a = document.createElement("a");
					// 	a.download = i.fileName;
					// 	a.href = e.target.result;
					// 	document.body.appendChild(a);
					// 	a.click();
					// 	document.body.removeChild(a);
					// }

				})
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值