当前位置: 首页 > 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 

http://www.lryc.cn/news/430159.html

相关文章:

  • 电脑无法新建 Word Excle PPT 这些文件是咋回事
  • CANoe.DiVa的应用——生成TP层测试用例过程流程详解(二)
  • java设计模式--组合模式、适配器模式
  • 保姆级-C#与Halcon的窗体界面展示阈值分割图像教程(机器视觉保姆级教程)
  • Kotlin学习-01创建kotlin学习环境
  • NGINX 之 location 匹配优先级
  • 算法_字符串专题---持续更新
  • Anaconda与conda、pip与conda的区别
  • odoo Request Entity Too Large
  • 【C++ 面试 - 面向对象】每日 3 题(六)
  • 基于tcp c/s的网络通信
  • 论文翻译:Universal and Transferable Adversarial Attacks on Aligned Language Models
  • Axure RP 9高手速成秘籍:解锁终极快捷键,设计效率飙升10倍!
  • Springcloud从零开始--Eureka(一)
  • [数据集][目标检测]agvs仓储机器人检测数据集VOC+YOLO格式967张3类别
  • (八)Flink Join 连接
  • 你也想转行成为一名程序员吗?作为过来人的我希望你想清楚这几个问题再做决定
  • Linux文件属性和打包压缩详解
  • 微服务注册到nacos时,注册失败报错解决
  • 基于Sringboot+Vue个人驾校预约管理系统--论文pf
  • python-逆序数(赛氪OJ)
  • PCIE-flit mode retry
  • 使用Obsidian实现Anki快速制卡
  • Python编程:从入门到实践书籍介绍
  • Vue 3 的 emit 简单使用
  • java在实际开发中反常识bug
  • java多线程(三)重排序与Happens-Before
  • RUST知识框架与学习框架
  • git cherry-pick命令使用分享
  • 关闭Chrome快捷键