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

前言:

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

实现方式:

html 复制代码
//.wxml文件
<view class="canvas-box">
//注意:一定要添加:type="2d"
  <canvas id="posterCanvas"canvas-id="posterCanvas" type="2d"></canvas>
  <view class="upload_btn" bindtap="onSaveSuccess"></view>
</view>
javascript 复制代码
 //.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方法,将其直接保存在用户本地相册

相关推荐
2501_916008893 小时前
用多工具组合把 iOS 混淆做成可复用的工程能力(iOS混淆|IPA加固|无源码混淆|Ipa Guard|Swift Shield)
android·开发语言·ios·小程序·uni-app·iphone·swift
liweiweili1267 小时前
驾校陪练下单小程序
小程序
TiAmo zhang7 小时前
微信小程序开发案例 | 简易登录小程序
微信小程序·小程序·1024程序员节
黑马源码库miui520868 小时前
场馆预定系统小程序
微信·微信小程序·小程序·1024程序员节
说私域11 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的市场份额扩张路径研究
人工智能·小程序·开源
2501_9151063211 小时前
iOS 打包 IPA 全流程详解,签名配置、工具选择与跨平台上传实战指南
android·macos·ios·小程序·uni-app·cocoa·iphone
00后程序员张11 小时前
iOS 混淆实操指南多工具组合实现 IPA 混淆、加固与发布治理 IPA 加固
android·ios·小程序·https·uni-app·iphone·webview
CRMEB系统商城16 小时前
【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
java·大数据·小程序·php·ux
知识分享小能手1 天前
uni-app 入门学习教程,从入门到精通,uni-app 企业项目实战:鲁嗑瓜子项目开发知识点(9)
前端·javascript·学习·微信小程序·小程序·uni-app·vue