适用于下载字符流图片

对于普通的图片下载,我们一般用a标签就可以实现,有时候我们需要下载从后端返回来的图片,返回结果有可能是字符流。这个时候如果我们还是用a标签去实现,就会发现只会发生路由跳转,并不能实现下载。
解决方法就是我们可以将图片链接转换成base64,再下载就可以了。

HTML部分

js部分
  1. getUrlBase64(url) {
  2. return new Promise(resolve => {
  3. let canvas = document.createElement('canvas')
  4. let ctx = canvas.getContext('2d')
  5. let img = new Image()
  6. img.crossOrigin = 'Anonymous' //允许跨域
  7. img.src = url
  8. img.onload = function() {
  9. canvas.height = 300
  10. canvas.width = 300
  11. ctx.drawImage(img, 0, 0, 300, 300)
  12. let dataURL = canvas.toDataURL('image/png')
  13. canvas = null
  14. resolve(dataURL)
  15. }
  16. })
  17. },

调用部分

  1. download() {
  2. this.getUrlBase64(‘此处传入图片链接’).then(base64 => {
  3. let link = document.createElement('a')
  4. link.href = base64
  5. link.download = 'qrCode.png'
  6. link.click()
  7. })
  8. },


如果属于静态图片

  1. download () {
  2. const link = document.createElement('a')
  3. link.href = require('@/assets/img/kyy/qrcode.jpg')
  4. console.log(link.href)
  5. link.download = 'qrCode.jpg'
  6. link.click()
  7. }


或图片文件保存

  1. const x = new window.XMLHttpRequest()
  2. x.open('GET', file.url, true)
  3. x.responseType = 'blob'
  4. x.onload = () => {
  5. const url = window.URL.createObjectURL(x.response)
  6. const a = document.createElement('a')
  7. a.href = url
  8. a.download = file.file_name
  9. a.click()
  10. }
  11. x.send()