vue3+ts+uniapp(微信小程序)---- 点击按钮保存图片的功能

vue3+ts+uniapp(微信小程序)---- 点击按钮保存图片的功能

描述:后台会给一张二维码图片,用户点击保存按钮即可保存图片到相册。

注意:

1)图片要是https形式;

2)要在微信公众平台中更新隐私协议,添加相册写入授权;

3)要在微信公众平台中开发设置中配置服务器域名中的downloadFile合法域名。

  1. 封装保存图片功能的ts,名称为downloadFile.ts
javascript 复制代码
/*
 * @Description: 点击按钮保存图片
 */

//引导用户开启权限
const isAuth = () => {
    uni.showModal({
        content: '由于您还没有允许保存图片到您相册里,无法进行保存,请点击确定允许授权。',
        success: (res) => {
            if (res.confirm) {
                uni.openSetting({
                    success: (result) => {
                        console.log(result.authSetting)
                    }
                })
            }
        }
    })
}

//保存网络图片到本地
const saveNetImageToLocal = (url: string) => {
    uni.downloadFile({
        url: url,
        success: (res) => {
            if (res.statusCode === 200) {
                uni.saveImageToPhotosAlbum({
                    filePath: res.tempFilePath,
                    success: () => {
                        setTimeout(() => {
                            uni.$u.toast('保存成功!')
                        }, 1000)
                    },
                    fail: (err) => {
                        console.log(err.errMsg)
                        uni.$u.toast(err.errMsg)
                    },
                    //无论成功失败都走的回调
                    complete: () => {
                        uni.hideLoading()
                    }
                })
            } else {
                uni.$u.toast('网络错误!')
            }
        }
    })
}

/**
 * @description: 点击保存图片
 * @return {*}
 */

export default function downloadFile(url: string) {
    uni.showLoading({
        title: '正在保存图片...'
    })
    //向用户发起授权请求
    uni.authorize({
        scope: 'scope.writePhotosAlbum',
        success: () => {
            //授权成功保存图片到系统相册
            uni.hideLoading()
            saveNetImageToLocal(url)
        },
        //授权失败
        fail: () => {
            uni.hideLoading()
            uni.$u.toast('未授权保存图片到相册!')
            //获取用户的当前设置。获取相册权限
            uni.getSetting({
                success: (res) => {
                    uni.$u.toast(res)
                    //如果没有相册权限
                    if (!res.authSetting['scope.writePhotosAlbum']) {
                        isAuth()
                    }
                },
                complete: () => {
                    uni.hideLoading()
                }
            })
        }
    })
}
  1. 在页面中进行调用
javascript 复制代码
<template>
   <view class="py-[30rpx] px-[30rpx] box-border w-[600rpx]">
    <view class="text-xl font-bold text-center mb-[40rpx]">分享二维码</view>
   	<view class="w-[400rpx] h-[400rpx] m-auto">
         <u-image width="400rpx" height="400rpx" :src="shareCodeImg" closeable></u-image>
    </view>
     <view class="w-[300rpx] m-auto mt-[40rpx]">
         <u-button type="primary" @click="downloadImg(shareCodeImg)">保存图片</u-button>
     </view>
 </view>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import downloadFile from '@/hooks/downloadFile.ts'
const shareCodeImg = ref('') // 二维码图片
/**
 * @description: 点击按钮保存图片
 * @param {*} url:图片路径
 * @return {*}
 */
const downloadImg = (url) => {
    downloadFile(url)
}
</script>
相关推荐
tcdos5 小时前
不止扫码 — 微信生态深度融合(登录 + 支付 + 消息)
后端·微信小程序
小徐_233319 小时前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
宸翰2 天前
解决 uni-app App 端 vue-i18n 占位符丢失:封装跨端可用的 tf 格式化方法
前端·vue.js·uni-app
时光足迹3 天前
uni-app 视频通话实战:康复师与患者视频问诊的 6 个致命 Bug 与解决方案
android·ios·uni-app
时光足迹3 天前
腾讯云 TRTC UniApp SDK 从入门到上线
前端·vue.js·uni-app
时光足迹3 天前
uni-app 里把加密视频嵌入页面播放?我分析了 4 种方案,只有 1 种接近完美
前端·vue.js·uni-app
时光足迹3 天前
JPush UniApp UTS 插件完全参考手册:API、事件与厂商通道一网打尽
vue.js·ios·uni-app
时光足迹3 天前
极光推送全攻略(下):uni-app 代码实现与 iOS 排查实战
vue.js·ios·uni-app
时光足迹3 天前
极光推送全攻略(上):被iOS证书折磨了三天,我写了一份前端也能看懂的避坑指南
前端·ios·uni-app
蜗牛前端3 天前
codex 全流程开发上线的高颜值礼簿小程序
前端·微信小程序