vue.js如何根据后台返回来的图片url进行图片下载

原创/朱季谦

最近在做一个前端vue.js对接的功能模块时,需要实现一个下载图片的功能,后台返回来的是一串图片url,试了很多种方法,发现点击下载时出来的效果,都是跳到一个新的图片网页,后来经过一番琢磨,终于解决了这个问题:

这是后台返回来的json数据(防止泄露重要信息IP地址打码了):

我在html里的引用是这样的:

html 复制代码
<a @click="downCom" >
     下载执照
     <i class="icon-down"></i>
 </a>

vue.js方法里的下载图片方法:

javascript 复制代码
   
      downCom() {
        let that = this;
        this.$http.files().then(res => {
          let hreLocal="";
          hreLocal = res.data.data.url;
          this.downloadByBlob(hreLocal,"pic")
       
        });
     },

下面这个方法,可以直接拿去用,直接把你的图片url传给这个方法,就可以实现vue.js来下载图片了。

javascript 复制代码
    downloadByBlob(url,name) {
      let image = new Image()
      image.setAttribute('crossOrigin', 'anonymous')
      image.src = url
      image.onload = () => {
        let canvas = document.createElement('canvas')
        canvas.width = image.width
        canvas.height = image.height
        let ctx = canvas.getContext('2d')
        ctx.drawImage(image, 0, 0, image.width, image.height)
        canvas.toBlob((blob) => {
         let url = URL.createObjectURL(blob)
         download(url,name)
         // 用完释放URL对象
         URL.revokeObjectURL(url)
       })
     }
   },
复制代码
调用的download(url,name)方法:
javascript 复制代码
 function download(href, name) {
   let eleLink = document.createElement('a')
   eleLink.download = name
   eleLink.href = href
   eleLink.click()
   eleLink.remove()
 }

完成上面的代码后,即可实现图片下载,而不是图片浏览啦。

最后成功实现点击即可下载图片,效果图如下:

相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
A黄俊辉A4 天前
uniapp webview中实现 app和内嵌的H5双向通信
vue.js·json
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
honkun64 天前
vue 表格组件 vxe-table 配置 ajax 请求自动加载数据与表单查询
vue.js·vxe-table
kybs19914 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端