微信小程序点击按钮,将图片下载到本地
前言:
最近在公司完成一个小程序的时候需要实现一个功能:点击按钮获取用户相册权限,将图片下载到用户本地相册,经过了好几次的尝试最终算是实现了。将总结的经验在这里分享给小伙伴们。
实现方式:
//.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方法,将其直接保存在用户本地相册
相关文章:
微信小程序点击按钮,将图片下载到本地
前言: 最近在公司完成一个小程序的时候需要实现一个功能:点击按钮获取用户相册权限,将图片下载到用户本地相册,经过了好几次的尝试最终算是实现了。将总结的经验在这里分享给小伙伴们。 实现方式: //.wxml文件 <…...
在Linux系统上集成OpenSlide与SpringBoot
本文档详细介绍如何在Linux系统上安装OpenSlide并将其与Spring Boot应用程序集成,以实现数字病理切片的处理和查看功能。 目录 OpenSlide简介在Linux上安装OpenSlide安装OpenSlide Java绑定在Spring Boot项目中集成OpenSlide示例代码性能优化建议常见问题解决参考资源OpenSli…...
现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示
目录 现代密码学体系架构设计原则与实践:基于Python的实现与GPU加速GUI演示一、前言二、现代密码学体系架构设计原则1. 安全性原则2. 模块化设计3. 最小权限原则4. 加密算法的选择5. 硬件加速与GPU应用6. 可扩展性与可维护性三、主要加密算法解析1. 对称加密算法:AES2. 非对称…...
pt-archiver删除数据库的数据表/各种报错类型
这篇帖子是前面文的一部分延申 mysqlimport导入一亿数据的csv文件/一行命令删除表-CSDN博客 如需转载,标记出处 目录 pt-archiver命令格式 如果执行后出现下面报错 1)Cannot find an ascendable index in table at /usr/bin/pt-archiver line 3233. …...
LLM 学习(一 序言)
文章目录 LLM 学习(一 序言)知识点1:“Embedding” 在人工智能领域:知识点2:Embedding 引入位置信息的原因知识点3:在 Transformer 的 Decoder 翻译第 i 个单词时进行 Mask 第 i1 个单词的操作 LLM 学习&am…...
STM32-HAL库初始化时钟
使能和失能外设GPIOA 时钟信号初始化函数 HAL_RCC_OscConfig函数: HAL_StatusTypeDef是该函数的返回值类型,最顶上的那句话只是这个函数的原型 HAL_RCC_ClockConfig函数: 因为FLASH实际上只能支持24MHz的时钟信号所以如果用高于24MHz的信号输入则要用到等…...
MySQL主从架构配合ShardingJdbc实现读写分离
文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…...
批量将 Word 拆分成多个文件
当一个 Word 文档太大的时候,我们通常会将一个大的 Word 文档拆分成多个小的 Word 文档,在 Office 中拆分 Word 文档是比较麻烦的,我们需要将 Word 文档的页面复制到另外一个 Word 文档中去,然后删除原 Word 文档中的内容。当然也…...
【算法系列】桶排序算法介绍及实现
文章目录 桶排序算法介绍及实现桶排序的基本原理算法实现步骤Java代码实现性能优化结论 桶排序算法介绍及实现 桶排序的基本原理 桶排序(Bucket Sort)是一种基于分组的排序算法,其核心思想是将一组数据按某种 规则分配到多个桶中࿰…...
当AI开始“思考“:拆解大模型训练与推理的秘密(以DeepSeek为例)
如果你用过deepseek,可能体验过它在几秒内编故事、写代码的震撼。但你是否想过,这种"智能输出"背后存在两种完全不同的底层机制?就像人类需要先学习知识(训练)才能考试答题(推理)&…...
13.数据结构(软考)
13.数据结构(软考) 13.1:线性表 13.1.1 顺序表 顺序存储方式:数组的内存是连续分配的并且是静态分配的,即在使用数组之前需要分配固定大小的空间。 时间复杂度: 读:O(1) 查询:1,(n1)/2&#x…...
拉拉扯扯adfda
read -p "请输入一个成绩:" sorce if [ "$sorce" -ge 90 -a "$sorce" -le 100 ] thenecho A elif [ "$sorce" -ge 80 -a "$sorce" -lt 90 ] thenecho B elif [ "$sorce" -ge 70 -a "$sorce"…...
【计算机网络】TCP
1.基本概念及报文格式 基本概念: TCP的中文全称为传输控制协议(Transmission Control Protocol),是一种可靠的,面向连接的,基于字节流的传输层通信协议。 报文格式: 序号 :占32⽐…...
doris: PostgreSQL
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 PostgreSQL 数据库。本文档介绍如何配置 PostgreSQL 数据库连接。 使用须知 要连接到 PostgreSQL 数据库,您需要 PostgreSQL 11.x 或更高版本 PostgreSQL 数据库的 JDBC 驱动程序,您可以从 Maven 仓…...
深度学习笔记——神经网络
本文为在拓尔思智能举办的训练营中学习内容的总结,部分内容摘自百度百科 个人在这里推荐一个好用的软件,Trae,主要是免费。 人工神经元是人工神经网络的基本单元。模拟生物神经元,人工神经元有1个或者多个输入(模拟多…...
django中路由配置规则的详细说明
在 Django 中,路由配置是将 URL 映射到视图函数或类视图的关键步骤,它决定了用户请求的 URL 会触发哪个视图进行处理。以下将详细介绍 Django 中路由配置的规则、高级使用方法以及多个应用配置的规则。 基本路由配置规则 1. 项目级路由配置 在 Django 项目中,根路由配置文…...
关于tomcat使用中浏览器打开index.jsp后中文显示不正常是乱码,但英文正常的问题
如果是jsp文件就在首行加 “<% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %>” 如果是html文件 在head标签加入: <meta charset"UTF-8"> 以jsp为例子,我们…...
pytest结合allure
Allure 一、文档二、指令三、装饰器3.1 allure.step装饰器3.2 allure.description装饰器3.3 allure.title装饰器3.4 allure.link、allure.issue 和 allure.testcase装饰器3.5 allure.epic、allure.feature 和 allure.story装饰器3.6 allure.severity装饰器 一、文档 allure文档…...
机器学习在地图制图学中的应用
原文链接:https://www.tandfonline.com/doi/full/10.1080/15230406.2023.2295948#abstract CSDN/2025/Machine learning in cartography.pdf at main keykeywu2048/CSDN GitHub 核心内容 本文是《制图学与地理信息科学》特刊的扩展评论,系统探讨了机…...
vue2升vue3,uniapp兼容鸿蒙app踩坑记录
前提:最近鸿蒙势头很好,公司的 uniapp vue2 项目,要兼容鸿蒙app。就开始了我的uniapp转鸿蒙踩坑之旅,请看下文(注意下文都是在uniapp开发基础上) 1. 首先鸿蒙开发只支持Vue3,不支持Vue2、不支持…...
Linux基础网络设置
文章目录 Linux基础网络设置介绍查看和配置网络接口查看活动网络接口信息临时修改网卡IP地址永久修改IP地址启用和关闭网卡 主机名设置查看和临时修改主机名永久修改主机名 路由表设置查看路由表信息 网络连接状态和接口统计信息查看网络连接状态 网络连通性测试测试网络连通性…...
DeepSeek × 豆包深度整合指南:工作流全解析
DeepSeek 豆包深度整合指南:工作流全解析 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 DeepSeek 豆包深度整合指南:工…...
海思Hi3516DV300交叉编译opencv
OpenCV是一个开源的跨平台计算机视觉库,支持C、Python等多种语言,适用于图像处理、目标检测、机器学习等任务。其核心由C编写,高效轻量,提供实时视觉处理功能,广泛应用于工业自动化、医疗影像等领域。 1 环境准备 1…...
【AI赋能】AI 工具生成视频教材:从创意到成品的全流程指南
AI 工具生成视频教材:从创意到成品的全流程指南 目标 通过本教材,您将学会如何利用 AI 工具(Grok、Sora、Speechify 和 CapCut)生成一个完整的视频,包括脚本生成、视频片段制作、字幕添加、音频生成以及最终剪辑合成…...
[FE] React 初窥门径(五):React 组件的加载过程(commit 阶段)
1. 回顾 前一篇文章我们看到,ReactDOM.render 总共包含这些步骤, 然后介绍了 performSyncWorkOnRoot 做的事情,它主要做了两件事, renderRootSync 可称之为 render 阶段:创建了一颗 Fiber Tree(包含 html …...
Linux(Centos 7.6)命令详解:vim
1.命令作用 vi/vim 是Linux 系统内置不可或缺的文本编辑命令,vim 是vi 的加强版本,兼容vi 的所有指令,不仅能编辑文本,而且还具有shell 程序编辑的功能,可以不同颜色的字体来辨别语法的正确性。 2.命令语法 usage: …...
Kubernetes Pod网络组件解析与选型指南
前言 在Kubernetes集群中,Pod网络插件是支撑容器间通信的核心基础设施。它决定了Pod如何跨节点互联、如何与外部服务交互,甚至如何实现网络安全策略。本文将从技术原理、主流方案对比到选型实践,全方位解析Pod网络组件的设计哲学与落地策略。…...
java环境部署
java环境部署 一、准备工作 jrejdkeclipse jdk下载:21和1.8-----官网:Oracle:Java 下载 |神谕 该处选择要依据自身的系统类型选择下载 idea的下载安装:IntelliJ IDEA | Other Versions 二、安装 三、环境配置 四、使用 五、i…...
100天精通Python(爬虫篇)——第115天:爬虫在线小工具_Curl转python爬虫代码工具(快速构建初始爬虫代码)
文章目录 一、curl是什么?二、爬虫在线小工具(牛逼puls)三、实战操作 一、curl是什么? 基本概念:curl 支持多种协议,如 HTTP、HTTPS、FTP、SFTP 等,可用于从服务器获取数据或向服务器发送数据&a…...
查看k8s集群的资源使用情况
查看Kubernetes(k8s)集群的资源使用情况有多种方法,以下是一些常见的方式: 使用kubectl命令行工具 查看节点资源使用情况 kubectl top nodes命令可以显示集群中各个节点的CPU和内存使用情况。例如: NAME …...
