详解基于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 设置文本框中焦点的位置
Nov 20 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
Apr 12 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
Apr 24 Javascript
jquery自定义下拉列表示例
Apr 25 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
Mar 02 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
Sep 10 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
JS引用传递与值传递的区别与用法分析
Jun 01 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
Jul 25 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
Apr 17 Javascript
微信小程序制作扭蛋机代码实例
Sep 24 Javascript
JS实现横向轮播图(中级版)
Jan 18 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学习之数组值的操作
2011/04/17 PHP
深入理解PHP中的global
2014/08/19 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
Javascript的时间戳和php的时间戳转换注意事项
2013/04/12 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
JS实现日期加减的方法
2013/11/29 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
js实现的全国省市二级联动下拉选择菜单完整实例
2015/08/17 Javascript
JS排序方法(sort,bubble,select,insert)代码汇总
2016/01/30 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
详解如何使用React Hooks请求数据并渲染
2020/10/18 Javascript
python正则表达式之作业计算器
2016/03/18 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
Python和Go语言的区别总结
2019/02/20 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
python中的测试框架
2020/11/13 Python
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
校园歌咏比赛主持词
2014/03/18 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
小学语文复习计划
2015/01/19 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
python 多态 协议 鸭子类型详解
2021/11/27 Python
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏