微信小程序点击保存图片到本地相册——踩坑
在微信小程序中要保存图片到本地相册,需要获取相册权限。
总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.downloadFile,wx.saveImageToPhotosAlbum
但是在openSetting 和 downloadFile 会有坑!
openSetting,【打开小程序设置页】有坑,是官方的问题,这里出现授权弹框,如果你点击拒绝再次引导授权流程弹框不会立马弹出(官方解释说因为频繁代用授权会带来各种一系列问题),如果想马上再次弹出授权弹框需要通过button来解决。
点击查看官方解释
//再次打开授权引导 方法1:使用 button 组件来使用此功能,示例代码如下:
<button open-type="openSetting" bindopensetting="callback">打开设置页</button> 方法2:由点击行为触发wx.openSetting接口的调用,示例代码如下:
<button bindtap="openSetting">打开设置页</button> openSetting() { wx.openSetting()}
wx.downloadFile 保存图片的时候,打印成功回调里边会有tempFilePath 后缀名不正确格式。(Android机会有这种情况,iOS不清楚),就回导致后续wx.saveImageToPhotosAlbum方法是出现错误:文件格式类型错误问题
解决方法:
重点:
有的说dowloadFile的url值要是jpg格式的,但是我试png也可以,具体情况具体分析。
var fileN=new Date().valueOf();
//filePath指定文件下载后存储的路径,wx.env.USER_DATA_PATH
var fileP=wx.env.USER_DATA_PATH+'/'+fileN+'.jpg'
wx.dowloadFile({
url:'你的图片url地址',
filePath:fileP,//这里要加这个filePath属性
success:(res)=>{
var filePath=res.filePath;
wx.saveImageToPhotosAlbum({
filePath,
success:(res)=>{
console.log('保存成功')
}
})
} })
完整代码
<image src="{{url}}"></image>
<view bindtap="clickSaveImg" class="save-code"></view>
Page({
data:{
url:'',//图片地址
},
clickSaveImg(){//先授权相册
wx.getSetting({
success:res=>{
if(!res.authSetting['scope.writePhotosAlbum']){//未授权的话发起授权
wx.authorize({
scope:'scope.writePhotosAlbum',
success:()=>{//用户允许授权,保存到相册
this.saveImg();
},
fail:()=>{//用户拒绝授权,然后就引导授权(这里的话如果用户拒绝,不会立马弹出引导授权界面,坑就是上边所说的官网原因)
wx.openSetting({
success:()=>{
wx.authorize({
scope:'scope.writePhotosAlbum',
succes:()=>{//授权成功,保存图片
this.saveImg();
}
})
}
})
}
})
}else{//已经授权
this.saveImg();
}
}
})
},
saveImg(){//保存到相册
let {url} = this.data;
wx.downloadFile({//这里如果有报错就按照上边的解决方案来处理
url:url,
success:(res)=>{
wx.saveImageToPhotosAlbum({
filePath:res.tempFilePath,
success:(res)=>{
wx.showToast({
title:'保存成功!'
})
},
faile:(err)=>{
console.log('失败!')
}
})
}
})
},
})
到了这里可以打开调试和在开发者工具都测试一下试试可不可以保存。
最后一个坑
在开发者工具和手机打开调试都可以成功保存图片,但是关了调试,就不可以保存。这个时候需要登录到微信小程序后台(开发->开发设置),查看downloadFile合法域名 中有没有配置合法域名,也就是下载图片路径的白名单,你的图片路径域名需要在这里配置,才可以!然后就可以保存图片!!!
原文链接:https://blog.csdn.net/sxs7970/java/article/details/104516732
微信小程序点击保存图片到本地相册——踩坑的更多相关文章
- 微信小程序点击保存图片到相册
wxml部分的代码 <view class="footer-r" bindtap="save"> <image src="../ ...
- 微信小程序点击图片放大预览
微信小程序点击图片放大预览使用到 wx.previewImage 接口,可以放大.上/下一张 上代码 wxml代码 <view class='content-img' wx:if="{ ...
- 微信小程序点击控制元素的显示与隐藏
微信小程序点击控制元素的显示与隐藏 首先我们先来看一下单个点击效果 我们来看一下wxml中的代码: <view class="conten"> <view cla ...
- 小程序框架WePY 从入门到放弃踩坑合集
小程序框架WePY 从入门到放弃踩坑合集 一点点介绍WePY 因为小程序的语法设计略迷, 所以x1 模块化起来并不方便, 所以x2 各厂就出了不少的框架用以方便小程序的开发, 腾讯看到别人家都出了框架 ...
- 微信小程序-工具无法加载本地模拟开发服务的解决办法
微信小程序开发工具出现如下问题: 因为网络代理软件或者 VPN 影响,工具无法加载本地模拟开发服务 请尝试以下任一解决方案1.关闭相关网络代理软件,重新编译成功后,再启动相关网络代理软件: 2.配置 ...
- 微信小程序点击返回顶层实现方法
最近在研究微信小程序,被这个返回顶层给坑了一波,下面贴代码 wxml代码: <scroll-view scroll-y style="height: 1000rpx;" sc ...
- 微信小程序 网络请求之re.request 和那些坑
微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...
- 使用charls抓包微信小程序的解决方案(终极解决,各种坑不怕,亲测可用,不服来战!)
第一步:使用charles进行https抓包 https://www.jianshu.com/p/7a88617ce80b 使用charles进行https抓包 使用Charles进行HTTPS抓 ...
- 微信小程序 - Request | 路由跳转 | 本地存储
Request 官方文档 wx.request相当于发送ajax请求 参数 属性 类型 默认值 必填 说明 url string 是 开发者服务器接口地址 data string/object/A ...
随机推荐
- nmap script 总结
一些常用脚本用法 nmap 脚本一些支持笼统扫描 usag. nmap -F --script auth 10.0.0.1 auth: 负责处理鉴权证书(绕开鉴权)的脚本 broadcast: 在局域 ...
- JavaSE (五)面向对象 -- 概述
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 目录 一.面向对象的主线 二.面向对象 VS 面向过程 三 . java最基本的两个要素 - 类和对象 ...
- Spring Cloud Ribbon 客户端负载均衡
Ribbon客户端组件提供一系列完善的配置选项,比如连接超时.重试.重试算法等,内置可插拔.可定制的负载均衡组件.下面是用到的一些负载均衡策略: 简单轮询负载均衡 加权轮询负载均衡 区域感知轮询负载均 ...
- Java实现 LeetCode 611 有效三角形的个数(双指针)
611. 有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 ( ...
- Java实现 蓝桥杯VIP 算法训练 装箱问题
题目描述 有一个箱子容量为V(正整数0≤V≤20000),同时有n个物品(0<n≤30,每个物品有一个体积(正整数). 要求nn个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入输出格 ...
- Java实现 洛谷 P1047 校门外的树
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = ...
- Redis企业级数据备份与恢复方案
一.持久化配置 RBD和AOF建议同时打开(Redis4.0之后支持) RDB做冷备,AOF做数据恢复(数据更可靠) RDB采取默认配置即可,AOF推荐采取everysec每秒策略 AOF和RDB还不 ...
- Java 8 新特性——检视阅读
Java 8 新特性--检视阅读 参考 Java 8 新特性--菜鸟 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的 ...
- opencl(3)程序、内核
1:程序 1)从上下文中创建程序 cl_program clCreateProgramWithSource( cl_context context, //上下文 cl_uint count, //文本 ...
- 还在用SimpleDateFormat格式化时间?小心经理锤你
还在用SimpleDateFormat格式化时间?小心经理锤你 场景 本来开开心心的周末时光,线上突然就疯狂报错,以为程序炸了,截停日志,发现是就是类似下述一段错误 java.lang.NumberF ...