详解基于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 相关文章推荐
prototype 中文参数乱码解决方案
Nov 09 Javascript
有关javascript的性能优化 (repaint和reflow)
Apr 12 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
Jun 24 Javascript
Jquery自定义button按钮的几种方法
Jun 11 Javascript
学习JavaScript正则表达式
Nov 13 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
Oct 18 Javascript
bootstrap daterangepicker汉化以及扩展功能
Jun 15 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
从零开始搭建一个react项目开发
Feb 09 Javascript
vue中将html字符串转换成html后遇到的问题小结
Dec 10 Javascript
部署vue+Springboot前后端分离项目的步骤实现
May 31 Javascript
JavaScript实现下拉列表
Jan 20 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 方便水印和缩略图的图形类
2009/05/21 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
ExtJS 学习专题(一) 如何应用ExtJS(附实例)
2010/03/11 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
JS编程小常识很有用
2012/11/26 Javascript
JS画线(实例代码)
2013/11/20 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
vue.js实现三级菜单效果
2019/10/19 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
2018/07/11 Python
Flask之请求钩子的实现
2018/12/23 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
设计部经理的岗位职责
2013/11/16 职场文书
个人求职信范文
2014/05/24 职场文书
工作失职检讨书
2015/01/26 职场文书
英文邀请函
2015/02/02 职场文书
2015年检验科工作总结
2015/04/27 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
在职证明范本
2015/06/15 职场文书
详解MySQL中的pid与socket
2021/06/15 MySQL