前端常用方法之图片文件下载方式

一、下载哪种类型的文件?

比如图片、文本等

二、代码

代码如下(示例):

methods:{
	handleDown(row){
	   const imageType = /.(jpg|jpeg|png|bmp)$/;
	   const  fileName = row.name || row.name2
	   //如果是图片类型的文件
	   if(fileName && imageType.test(fileName.trim().toLowerCase())){
	 	const type = fielName.trim().split('.')[fileName.trim().split('.').length - 1];
		let image = new Image();
		image.setAttribute('crossOrigin',anonymous);
		image.onload = function(){
			let canvas = document.createElement('canvas');
			canvas.width = image.width ;
	
			canvas.height = image.height;
			let context = canvas.getContext('2d');
			context.drawImage(image,0,0,image.width,image.height);
			let dataURL = canvas.toDataURL(`image/${type}`);
			let blob dataURLtoBlob(dataURL);
			cosnt url = {
				name:fileName,
				src:blob
			};
			if(window.navigator.msSaveOrOpenBlob){	//如果是IE浏览器
				navigator.msSaveBlob(url.src,url.name)
			}else{
				let link = document.crerateElement('a');
				link.setAttribute('href',window.URL.createObjectURL(url.src));
				link.setAttribute('download',url.name);	
				document.appendChild(link);
				link.click();
			}			
		};
		image.src = row.fileUrl;   
		/*
		*  @param {string} dataurl 前端将获取到的url 转为base64
		*  @ return {Blob} 返回Blob对象
		*/	
		function dataURLtoBolb(dataurl){
			let arr = dataurl.split(','),mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]), n = bstr.length , u8arr = new Uint8Array(n);
			while(n--){
				u8arr[n] = bstr.charCodeAt(n)	
			}
			return new Blob([u8arr],{type:mime});
		}
	   }else{
		cosnt url = {
			name:fileName,
			src:fileUrl
		};
		if(window.navigator.msSaveOrOpenBlob){	
			navigator.msSaveBlob(url.src,url.name)
		}else{	
			let link = document.createElement('a');
			link.setAttribute('href',url.src);
			link.setAttribute('target','_blank');
			link.setAttribute('download',url.name);	
			document.appendChild(link);
			link.click();
		}
	   }
	}
}

小菜鸟总会慢慢成长,加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值