详解基于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 相关文章推荐
javascript 设计模式之单体模式 面向对象学习基础
Apr 18 Javascript
IE6不能修改NAME问题的解决方法
Sep 03 Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
Apr 28 Javascript
js window.open弹出新的网页窗口
Jan 16 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
May 09 Javascript
JavaScript中的splice()方法使用详解
Jun 09 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
Aug 24 Javascript
JS常用倒计时代码实例总结
Feb 07 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
Jun 11 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 Javascript
vue实现图片预览组件封装与使用
Jul 13 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
js中判断控件是否存在
2010/08/25 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
jquery基础知识第一讲之认识jquery
2016/03/17 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python制作数据导入导出工具
2015/07/31 Python
全面了解python字符串和字典
2016/07/07 Python
Python3对称加密算法AES、DES3实例详解
2018/12/06 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Python3 修改默认环境的方法
2019/02/16 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
经理管理专业毕业自荐书范文
2014/02/12 职场文书
道德模范先进事迹
2014/02/14 职场文书
初级会计求职信范文
2014/02/15 职场文书
人代会标语
2014/06/30 职场文书
Python基础 括号()[]{}的详解
2021/11/07 Python