详解基于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 相关文章推荐
jquery的ajax请求全面了解
Mar 20 Javascript
js关闭父窗口时关闭子窗口
Apr 01 Javascript
jQuery布局插件UI Layout简介及使用方法
Apr 03 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
Jun 26 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 Javascript
JS实现的不规则TAB选项卡效果代码
Sep 18 Javascript
js 提交form表单和设置form表单请求路径的实现方法
Oct 25 Javascript
JavaScript Ajax实现异步通信
Dec 14 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
详解require.js配置路径的用法和css的引入
Sep 06 Javascript
zTree节点文字过多的处理方法
Nov 24 Javascript
解决VUE双向绑定失效的问题
Oct 29 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
Home Coffee Roasting
2021/03/03 咖啡文化
php 注释规范
2012/03/29 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
PHP的基本常识小结
2013/07/05 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
Prototype源码浅析 String部分(二)
2012/01/16 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
bootstrap中模态框、模态框的属性实例详解
2017/02/17 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
微信公众号网页分享功能开发的示例代码
2020/05/27 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
Python标准库defaultdict模块使用示例
2015/04/28 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
Django分组聚合查询实例分享
2020/04/29 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
PHP使用Redis队列执行定时任务实例讲解
2021/03/24 PHP
如何写好优秀的创业计划书
2014/01/30 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
先进教师个人主要事迹材料
2015/11/03 职场文书
高中议论文(范文2篇)
2019/08/19 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
Java基础——Map集合
2022/04/01 Java/Android
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android