微信小程序实现长按图片保存到本地的方法

476 阅读1分钟

直接上代码:

// 长按保存功能
  saveImage(e) {
    const url = e.currentTarget.dataset.url;
    const {
      saveImageStep1,
      saveImageStep2,      saveImageStep3,      saveImageStep4    } = this
    saveImageStep1(url).then(saveImageStep2).then(saveImageStep3).then(saveImageStep4)  },
  // 调起 actionsheet
  saveImageStep1(url) {    const p1 = new Promise((resolve, reject) => {
      wx.showActionSheet({
        itemList: ['保存到相册'],
        success: res => {
          resolve(url)
        },
        fail: err => {
          reject(err)
        }
      })
    })
    return p1
  },
  // 相册访问授权
  saveImageStep2(url) {    const p2 = new Promise((resolve, reject) => {
      wx.getSetting({
        success: settings => {
          if (!settings.authSetting['scope.writePhotosAlbum']) {
            wx.authorize({
              scope: 'scope.writePhotosAlbum',
              success: () => {
                // 同意授权
                resolve(url)
              },
              fail: () => {
                wx.showModal({
                  title: '保存失败',
                  content: '请开启访问手机相册权限',
                  success: () => {
                    wx.openSetting()
                  }
                })
                reject()
              }
            })
          } else {
            // 已经有权限了
            resolve(url)
          }
        }
      })
    })
    return p2
  },
  // 转换图片格式为本地路径
  saveImageStep3(url) {    const p3 = new Promise((resolve, reject) => {
      wx.getImageInfo({
        src: url,
        success: res => {
          resolve(res.path)
        },
        fail: () => {
          reject()
        }
      })
    })
    return p3
  },
  // 保存图片到手机
  saveImageStep4(path) {    const p4 = new Promise((resolve, reject) => {
      wx.saveImageToPhotosAlbum({
        filePath: path,
        success: () => {
          wx.showToast({
            title: '已保存到相册',
          })
        },
        fail: err => {
          console.log(err)
        }
      })
    })
    return p4
  },