当前位置: 首页 > article >正文

微信小程序点击按钮,将图片下载到本地

前言:

最近在公司完成一个小程序的时候需要实现一个功能:点击按钮获取用户相册权限,将图片下载到用户本地相册,经过了好几次的尝试最终算是实现了。将总结的经验在这里分享给小伙伴们。

实现方式:

//.wxml文件
<view class="canvas-box">
//注意:一定要添加:type="2d"
  <canvas id="posterCanvas"canvas-id="posterCanvas" type="2d"></canvas>
  <view class="upload_btn" bindtap="onSaveSuccess"></view>
</view>
 //.js文件
  data: {
    urlSrc: "",
  },
// 保存图片
    onSaveSuccess() {
      const query = wx.createSelectorQuery().in(this);
      query
        .select("#posterCanvas")
        .fields({ node: true, size: true })
        .exec((res) => {
          if (res[0] && res[0].node) {
            const canvas = res[0].node;
            // 将 canvas 内容导出为临时文件
            wx.canvasToTempFilePath({
              canvas,
              success: (res) => {
                if (res.tempFilePath) {
                  this.setData({
                    urlSrc: res.tempFilePath,
                  });
                  this.saveCard(res.tempFilePath);
                } else {
                  wx.showToast({
                    title: "导出失败,请重试",
                    icon: "none",
                  });
                }
              },
              fail: (err) => {
                wx.showToast({
                  title: "导出失败,请重试",
                  icon: "none",
                });
              },
            });
          } else {
            wx.showToast({
              title: "未找到 canvas 节点",
              icon: "none",
            });
          }
        });
    },
    saveCard: function (img) {
      let that = this;
      var imgSrc = img;
      //获取相册授权
      wx.getSetting({
        success(res) {
          if (!res.authSetting["scope.writePhotosAlbum"]) {
            wx.authorize({
              scope: "scope.writePhotosAlbum",
              success() {
                that.img(imgSrc);
              },
            });
          } else {
            that.img(imgSrc);
          }
        },
      });
    },
    img: function (imgSrc) {
      var imgSrc = imgSrc;
      // wx.downloadFile({
      //   url: imgSrc,
      //   success: function (res) {
      wx.saveImageToPhotosAlbum({
        filePath: imgSrc,
        success: function (data) {
          wx.showToast({
            title: "保存成功",
            duration: 2000,
          });
        },
        fail: function (err) {
          if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") {
            wx.openSetting({
              success(settingdata) {
                if (settingdata.authSetting["scope.writePhotosAlbum"]) {
                  wx.showToast({
                    title: "图片已保存",
                    icon: "none",
                    duration: 2000,
                  });
                  console.log(
                    "获取权限成功,给出再次点击图片保存到相册的提示。"
                  );
                } else {
                  console.log("获取权限失败,给出不给权限就无法正常使用的提示");
                }
              },
            });
          }
        },
      });
      //   },
      //   fail: function (err) {
      //     console.log(err, "进入wx.downloadFile错误分支");
      //   },
      // });
    },

注意事项:
不使用wx.downloadFile方法的原因是:使用 wx.canvasToTempFilePath方法将会导出一个http://temp....png的图片,使用wx.downloadFile方法将会报错:downloadFile:fail url not in domain list,关于解决这个报错请看我的另一篇博客:解决微信小程序下载图片报错:downloadFile:fail url not in domain list。众所周知,微信公众平台的downloadFile合法域名只能配置以https://开头的域名,既然已经获得了这个文件地址就可以直接调用 wx.saveImageToPhotosAlbum方法,将其直接保存在用户本地相册


http://www.kler.cn/a/570343.html

相关文章:

  • 组件间的信息传递($emit、$on、$off)
  • 「Selenium+Python自动化从0到1③|2025最新八种元素定位方法实战解析(附验证代码,定位详情图,百度实战示例图)」
  • 基于深度学习+NLP豆瓣电影数据爬虫可视化推荐系统
  • Flutter 学习之旅 之 flutter 使用 flutter_screenutil 简单进行屏幕适配
  • Spring Boot 简介与快速搭建及启动流程详解
  • 在CentOS 7上安装和配置Nginx
  • 基于 SpringBoot 的招聘信息管理系统设计和实现(源码+文档+部署讲解)
  • 《OpenCV》—— 人脸识别
  • DeepSeek架构革命:动态异构计算
  • 多模块 Maven 项目的管理(二)
  • Qt实现发送HTTP请求
  • 场内、场外期权怎么开户?期权佣金是多少?
  • C++简易贪食蛇项目
  • ObjectVLA如何让Franka机器人自主理解新物体
  • thinkphp5对接阿里云ocr试卷切题
  • 编程中的拓扑思维:突破传统架构的创新之路
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_list_init
  • 基于单片机的机床切屑运输系统设计
  • Spring学习笔记03——Spring Boot的文件结构
  • 【ubuntu20安装usv_sim_lsa (无人水面航行器模拟环境) - v0.3】