详解基于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 相关文章推荐
cument.execCommand()用法深入理解
Dec 04 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
JQuery查找DOM节点的方法
Jun 11 Javascript
PHP+jQuery+Ajax+Mysql如何实现发表心情功能
Aug 06 Javascript
JavaScript常用本地对象小结
Mar 28 Javascript
浅谈jQuery双事件多重加载的问题
Oct 05 Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
Sep 27 Javascript
layui的数据表格+springmvc实现搜索功能的例子
Sep 28 Javascript
JS性能优化实现方法及优点进行
Aug 30 Javascript
解决iview table组件里的 固定列 表格不自适应的问题
Nov 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
php微信支付接口开发程序
2016/08/02 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
JS实现的打字机效果完整实例
2016/06/20 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
Vue组件基础用法详解
2020/02/05 Javascript
Python subprocess模块学习总结
2014/03/13 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
Python中实现输入一个整数的案例
2020/05/03 Python
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
Nike墨西哥官网:Nike MX
2020/08/30 全球购物
素质拓展感言
2014/01/29 职场文书
《可爱的动物》教学反思
2014/02/22 职场文书
人事专员的岗位职责
2014/03/01 职场文书
药剂专业求职信
2014/06/20 职场文书
python实现简单倒计时功能
2021/04/21 Python
MySQL之select、distinct、limit的使用
2021/11/11 MySQL
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL