详解基于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中的集合及效率
Jan 08 Javascript
JavaScript四种调用模式和this示例介绍
Jan 02 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
JS实现简单的键盘打字的效果
Apr 24 Javascript
浅谈javascript语法和定时函数
May 03 Javascript
18个非常棒的jQuery代码片段
Nov 02 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
AngularJs表单校验功能实例代码
Feb 09 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
Vue父组件如何获取子组件中的变量
Jul 24 Javascript
VUE-ElementUI 自定义Loading图操作
Nov 11 Javascript
VUE递归树形实现多级列表
Jul 15 Vue.js
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开发工具之vs2005图解
2008/01/12 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
基于jQuery架构javascript基础体系
2011/01/01 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
jquery使用经验小结
2015/05/20 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
微信小程序视图template模板引用的实例详解
2017/09/20 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
Node.js log4js日志管理详解
2018/07/31 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
微信小程序云开发之使用云函数
2019/05/17 Javascript
对python中大文件的导入与导出方法详解
2018/12/28 Python
python用for循环求和的方法总结
2019/07/08 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
诚实守信道德模范事迹材料
2014/08/15 职场文书
商场周年庆活动方案
2014/08/19 职场文书
医德考评自我评价
2014/09/14 职场文书
银行自荐信怎么写
2015/03/05 职场文书
客服专员岗位职责范本
2015/04/07 职场文书
看上去很美观后感
2015/06/10 职场文书
护士业务学习心得体会
2016/01/25 职场文书
初二数学教学反思
2016/02/17 职场文书
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers
SQL语句多表联合查询的方法示例
2022/04/18 MySQL