详解基于mpvue微信小程序下载远程图片到本地解决思路


Posted in Javascript onMay 16, 2019

说明

最近有些空余时间开始着手优化我那个吉他自学小助手的微信小程序,其中有一个功能是下载吉他谱到本地,开始以为只是很简单的拿到图片url然后down下来就好了,其实不然...最终通过google解决了这个问题,现在记录一下,以便后续翻阅。

少废话先看东西

详解基于mpvue微信小程序下载远程图片到本地解决思路

演示.gif

流程梳理

获取图片远程地址数组-->遍历拿到图片缓存(临时地址)(wx.getImageInfo)-->保存缓存图片到本地(wx.saveImageToPhotosAlbum)

完整代码

子组件代码逻辑

//子组件download-file.vue
<template>
 <div></div>
</template>

<script>
export default {
 props: {
  urls: {
   default: ""//通过父组件传递远程图片路径数组
  }
 },
 watch: {
  urls() {
   if (this.urls.length > 0) {
    this.downLoadImage(this.urls);//监听变化
   }
  }
 },
 methods: {
  //拿到图片的临时路径
  getImageInfo(url) {
   var cache = {};
   return new Promise((resolve, reject) => {
    /* 获得要在画布上绘制的图片 */
    if (cache[url]) {
     resolve(cache[url]);
    } else {
     const objExp = new RegExp(
      /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/
     );
     if (objExp.test(url)) {
      wx.getImageInfo({
       src: url,
       complete: res => {
        if (res.errMsg === "getImageInfo:ok") {
         cache[url] = res.path;
         resolve(res.path);
        } else {
         reject(new Error("getImageInfo fail"));
        }
       }
      });
     } else {
      this.cache[url] = url;
      resolve(url);
     }
    }
   });
  },
  downLoadImage(urls) {
   const vm = this;
   let temp = [];
   if (urls.length > 0) {
    urls.map((item, index) => {
     vm.getImageInfo(item).then(res => {
      temp.push(res);
      vm.saveImageToLocal(res);
     });
    });
   }
  },
  saveImageToLocal(path) {
   //保存临时图片到本地
   wx.saveImageToPhotosAlbum({
    filePath: path,
    success(res) {
     console.log("success");
    },
    fail: function(res) {
     console.log(res);
    }
   });
  }
 }
};
</script>

<style>
</style>

在父组件中引用

//news/detail.vue
//省略代码...
<button @click="download">下载</button>
//省略代码...
<download-file :urls="downLoadUrls" ref="myDownload"></download-file>
//省略代码...
async download() {
  let vm = this;
  const temp = [];
  let data = await vm.$net.get(vm.$apis.articleDetails, {
    id: vm.item.id
  });
  if (data.article.body.length > 0) {
   data.article.body.map((item, index) => {
    if (item.type == "img") {
     temp.push(item.data);
    }
  });
 }
 vm.downLoadUrls = temp;
},

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS array 数组详解
Mar 22 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
Oct 11 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
Aug 30 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
AngularJS入门教程之过滤器详解
Aug 19 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
js实现点赞按钮功能的实例代码
Mar 06 Javascript
JavaScript中数组去重的5种方法
Jul 04 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
Js实现粘贴上传图片的原理及示例
Dec 09 Javascript
Django模板继承 extend标签实例代码详解
May 16 #Javascript
vue视图不更新情况详解
May 16 #Javascript
详解如何写出一个利于扩展的vue路由配置
May 16 #Javascript
Vue中props的详解
May 16 #Javascript
使用Vue实现移动端左滑删除效果附源码
May 16 #Javascript
Vue2.0实现组件之间数据交互和通信操作示例
May 16 #Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 #Javascript
You might like
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
php+iframe 实现上传文件功能示例
2020/03/04 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
javascript与CSS复习(二)
2010/06/29 Javascript
javascript 闭包
2011/09/15 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
详解swiper在vue中的应用(以3.0为例)
2018/09/20 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
2019/05/10 Javascript
jQuery实现的点击显示隐藏下拉菜单功能完整示例
2019/05/17 jQuery
[49:41]NB vs NAVI Supermajor小组赛A组 BO3 第一场 6.2
2018/06/03 DOTA
[55:03]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.20
2020/11/20 DOTA
在Django的通用视图中处理Context的方法
2015/07/21 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
励志广播稿300字(5篇)
2014/09/15 职场文书
起诉书格式范文
2015/05/20 职场文书
为自己工作观后感
2015/06/11 职场文书
建筑工程催款函
2015/06/24 职场文书
个人催款函范文
2015/06/24 职场文书
2016新年感言
2015/08/03 职场文书
员工规章制度范本
2015/08/07 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书