详解基于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中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
Aug 12 Javascript
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
jquery中获取select选中值的代码
Jun 27 Javascript
jQuery实现预加载图片的方法
Mar 17 Javascript
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
Angular模板表单校验方法详解
Aug 11 Javascript
Js利用console计算代码运行时间的方法示例
Sep 24 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
Sep 02 Javascript
js实现Element中input组件的部分功能并封装成组件(实例代码)
Mar 02 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
基于header的一些常用指令详解
2013/06/06 PHP
php制作文本式留言板
2015/03/18 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
jquery和ajax的关系详细介绍
2013/11/29 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
基于javascript制作经典传统的拼图游戏
2016/03/22 Javascript
使用SVG基本操作API的实例讲解
2017/09/14 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
微信小程序实现图片上传功能
2018/05/28 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
python 实现识别图片上的数字
2019/07/30 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
html5 视频播放解决方案
2016/11/06 HTML / CSS
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
2014年生活老师工作总结
2014/12/23 职场文书
美术教师个人工作总结
2015/02/06 职场文书
员工辞退通知书
2015/04/17 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript