elementui,js,window.open预览、打开、下载base64图片、pdf、文件

在这里文件的base64字符串是带前面的头信息的,如下:
data:image/jpeg;base64,/9j/4QGCRX
data:application/pdf;base64,JVBERi0x

showOrDownload: function (base64String) {
	//这里截取后的fileHeader是data:image/jpeg
	var fileHeader = base64String.slice(0, base64String.indexOf(";base64"));
	//图片格式的imageType是image,所以就不用判断具体的图片类型了
	var imageType = fileHeader.slice(fileHeader.indexOf(":") + 1, fileHeader.indexOf("/"));
	if (imageType === 'image') {
		//图片预览
		this.showImage(base64String);
		return;
	}

	var fileType = fileHeader.slice(fileHeader.indexOf("/") + 1);
	if (fileType === 'pdf') {
		//pdf预览
		this.showPdf(base64String);
		return;
	}

	//其他类型文件只能下载
	this.base64StringToDownload(base64String);

},
showImage: function (base64String) {
	const img = new Image();
	img.src = base64String;
	const newWin = window.open("", "_blank");
	newWin.document.write(img.outerHTML);
	newWin.document.title = "附件";
	newWin.document.close();
},
showPdf: function (base64String) {
	var pdfResult = base64String;
	let pdfWindow = window.open("");
	pdfWindow.document.write("<iframe width='100%' height='100%' src=" + pdfResult + "></iframe>");
	pdfWindow.document.title = "附件"
	pdfWindow.document.close();
},
base64StringToBlob: function (base64String) {
	var arr = base64String.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});
},
base64StringToDownload: function (base64String) {
	//生成唯一的文件名,长度可以自己定义
	const id = Number(Math.random().toString().substr(3, 5) + Date.now()).toString(36);
	let blob = this.base64StringToBlob(base64String);
	let url = URL.createObjectURL(blob)
	let save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a")
	save_link.href = url
	save_link.download = "附件" + id;
	save_link.click();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值