当前位置: 首页 > news >正文

uniapp 修复使用 uni.saveImageToPhotosAlbum 方法在部分安卓手机上保存失败

场景:使用 uni.saveImageToPhotosAlbum 保存图片,其他手机都是可以的,但在鸿蒙系统的手机上出现了bug,报错Object {errMsg:"savelmageToPhotosAlbum:fai..errMsg:savelmageToPhotosAlbum:fail invalid filetype"}

原因:部分手机使用uni.downloadFile方法下载网络资源图片后,得到的图片临时路径的扩展名是unknown,所以后续在调用wx.saveImageToPhotosAlbum 方法时候会报错以上错误——文件类型错误。

解决方法: filePath指定文件下载后存储的路径,手动加扩展名.jpg

代码实现:代码下面贴啦我框出来的重点地方

    saveImg() {const url = this.posterImage // 真正要下载的图片地址let filename = new Date().getTime() + ".jpg";let filePath = wx.env.USER_DATA_PATH + "/" + filename  // wx.env.USER_DATA_PATH:获取到这个目录的路径。console.log('图片临时地址', filePath);uni.authorize({scope: 'scope.writePhotosAlbum',success() {uni.showLoading({ title: '图片保存中', mask: true })uni.downloadFile({url: url,filePath: filePath,fail(err) {uni.hideLoading()console.error('保存失败,错误信息:', err);uni.showToast({title: '保存失败,请稍后重试',icon: 'none',})},success(res) {uni.saveImageToPhotosAlbum({filePath: res.filePath,success() {uni.hideLoading()// 删除缓存let fileMgr = wx.getFileSystemManager();fileMgr.unlink({filePath: filePath, // 这里是上面自己设置的临时文件路径success() {console.log('删除成功');},fail(err) {console.error('删除失败,错误信息:', err);}})},fail(err) {uni.hideLoading()console.error('保存失败,错误信息:', err);uni.showToast({title: '保存失败,请稍后重试',icon: 'none',})},})console.log(res)},})},fail:(fail)=>{uni.hideLoading()console.log('授权失败:', fail);},})},

重点:重要部分被我用红框框框住啦~

以上方法解决我在鸿蒙系统上发现的问题,要是实在还有什么刁难的手机不适配,就试试图片上自带的一个属性:show-menu-by-longpress,可以让用户长按保存,或者使用wx.showShareImageMenu方法,帮用户调起长按菜单~

image | uni-app官网

 wx.showShareImageMenu(Object object) | 微信开放文档

参考地址:https://developers.weixin.qq.com/community/develop/article/doc/00028e66964080633ab98abae5b813 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 生信分析:精准科研的幕后英雄,加速生物医学研究新进程
  • 其他自动重试的注解
  • 洛谷P1198.最大数
  • Voice agent connected!回顾一场 24 小时的黑客松
  • Cocos Creator通用关卡编辑器UniLevelEditor
  • AcWing-算法提高课(第一章)-下
  • 【经典算法】BFS_最短路问题
  • Linux文件属性和打包压缩详解
  • 模拟笔试:卡码网2023年快手笔试真题
  • 分组循环算法
  • 网络编程TCP与UDP
  • 备战秋招60天算法挑战,Day22
  • I2C通信协议(软件I2C和硬件I2C)
  • 博客园-awescnb插件-geek皮肤优化--公众号卡片
  • Kerberos认证以及黄金票据白银票据的简单介绍
  • JS 中的深拷贝与浅拷贝
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【Linux系统编程】快速查找errno错误码信息
  • Android框架之Volley
  • DataBase in Android
  • github指令
  • HTTP那些事
  • If…else
  • Linux CTF 逆向入门
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Nacos系列:Nacos的Java SDK使用
  • SpringCloud集成分布式事务LCN (一)
  • windows下如何用phpstorm同步测试服务器
  • XML已死 ?
  • yii2中session跨域名的问题
  • 对象引论
  • 分布式事物理论与实践
  • 基于组件的设计工作流与界面抽象
  • 简析gRPC client 连接管理
  • 前端自动化解决方案
  • 使用SAX解析XML
  • 移动端解决方案学习记录
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 《码出高效》学习笔记与书中错误记录
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (09)Hive——CTE 公共表达式
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)ssm高校实验室 毕业设计 800008
  • (三)elasticsearch 源码之启动流程分析
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)ORM