详解基于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 相关文章推荐
jscript之Open an Excel Spreadsheet
Jun 13 Javascript
Js 获取Gridview选中行的内容操作步骤
Feb 05 Javascript
JavaScript栏目列表隐藏/显示简单实现
Apr 03 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
Nov 21 Javascript
jQuery trigger()方法用法介绍
Jan 13 Javascript
javascript实现C语言经典程序题
Nov 29 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
Sep 18 Javascript
原生JS实现Ajax跨域请求flask响应内容
Oct 24 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
Oct 08 Javascript
详解webpack4之splitchunksPlugin代码包分拆
Dec 04 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
May 26 Javascript
原生js实现的观察者和订阅者模式简单示例
Apr 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代码
2010/02/16 PHP
深入解析php之apc
2013/05/15 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
thinkPHP5.0框架环境变量配置方法
2017/03/17 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
js变量、作用域及内存详解
2014/09/23 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
轻松实现Bootstrap图片轮播
2020/04/20 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
Vue 项目中遇到的跨域问题及解决方法(后台php)
2018/03/28 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
解决在Vue中使用axios用form表单出现的问题
2019/10/30 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
python实现获取序列中最小的几个元素
2014/09/25 Python
python使用knn实现特征向量分类
2018/12/26 Python
Python根据URL地址下载文件并保存至对应目录的实现
2020/11/15 Python
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
求网格中的黑点分布
2013/11/06 面试题
工程概预算专业毕业生求职信
2013/10/04 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
2014年班组工作总结
2014/11/20 职场文书
Django migrate报错的解决方案
2021/05/20 Python