适用于下载字符流图片
对于普通的图片下载,我们一般用a标签就可以实现,有时候我们需要下载从后端返回来的图片,返回结果有可能是字符流。这个时候如果我们还是用a标签去实现,就会发现只会发生路由跳转,并不能实现下载。
解决方法就是我们可以将图片链接转换成base64,再下载就可以了。
HTML部分
下载
js部分
getUrlBase64(url) {return new Promise(resolve => {let canvas = document.createElement('canvas')let ctx = canvas.getContext('2d')let img = new Image()img.crossOrigin = 'Anonymous' //允许跨域img.src = urlimg.onload = function() {canvas.height = 300canvas.width = 300ctx.drawImage(img, 0, 0, 300, 300)let dataURL = canvas.toDataURL('image/png')canvas = nullresolve(dataURL)}})},
调用部分
download() {this.getUrlBase64(‘此处传入图片链接’).then(base64 => {let link = document.createElement('a')link.href = base64link.download = 'qrCode.png'link.click()})},
如果属于静态图片
download () {const link = document.createElement('a')link.href = require('@/assets/img/kyy/qrcode.jpg')console.log(link.href)link.download = 'qrCode.jpg'link.click()}
或图片文件保存
const x = new window.XMLHttpRequest()x.open('GET', file.url, true)x.responseType = 'blob'x.onload = () => {const url = window.URL.createObjectURL(x.response)const a = document.createElement('a')a.href = urla.download = file.file_namea.click()}x.send()
