咸虾米壁纸微信小程序下载图片到相册saveImageToPhotosAlbum功能修改

news/2024/12/21 18:20:03/

当我将咸虾米壁纸这个项目进行重构的时候,想要将图片资源变得小一点,所以在上传图片的时候均采用了webp格式的,这样就导致再预览页面下载图片的时候出错了,之前使用的是uni.getImageInfo()这个API,该API不支持webp图片格式获取临时地址,所以这篇文章将getImageInfo方法改成uni.downloadFile()方法便可解决。
在这里插入图片描述

在这里插入图片描述

原来的方法

原文链接:https://blog.csdn.net/qq_18798149/article/details/135871140


//点击下载
const clickDownload = async () => {try {uni.showLoading({title: "下载中...",mask: true})let res = await downPushData();if(res.errCode != 0) throw res;			// #ifdef MP || APP				uni.getImageInfo({src: crtWallInfo.value.picurl,success: function(res) {					var path = res.path;uni.saveImageToPhotosAlbum({filePath: path,success(res) {uni.hideLoading();uni.showToast({title: '保存成功,可去相册查看',icon: "none",duration:2000})							},fail(err) {uni.hideLoading();if(err.errMsg == 'saveImageToPhotosAlbum:fail cancel'){uni.showToast({title: '保存失败,请重新点击下载',icon: "none"})return;}							uni.showModal({title: '提示',content: '需要您授权保存相册',showCancel: false,success:res=>{if(res.confirm){uni.openSetting({success(settingdata) {if (settingdata.authSetting['scope.writePhotosAlbum']) {uni.showToast({title:'获取权限成功',icon:"none"})													}else{uni.showToast({title:'获取权限失败',icon:"none"})													}}})}}})},complete(err) {}})}})// #endif// #ifdef H5//调用预览图片的方法		uni.previewImage({urls: [crtWallInfo.value.picurl],current: 0, //点击图片传过来的下标success: (res) => {uni.showToast({title: '请长按保存',icon: "none",duration: 2000})}})// #endif} catch (err) {			console.log(err);uni.hideLoading();}
}

上面这个方法,通过uni.getImageInfo()无法获取webp格式,所以进行改造,使用uni.downloadFile()这个API,不过这个API返回的参数和上面有差异,注意对比。

修改后代码

//点击下载
const clickDownload = async () => {if(!gotoLogin()) return;let {_id,classid} = currentInfo.value;		// #ifdef H5let feedback = await showModal({content:"请长按保存壁纸"})if(feedback == 'confirm') actionCloudObj.writeDownload({picid:_id,classid})// #endif// #ifndef H5try {uni.showLoading({title: "下载中...",mask: true})			uni.downloadFile({url: currentInfo.value.picurl,success: (res) => {console.log(res);uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: (res) => {uni.showToast({title: "保存成功,请到相册查看",icon: "none"})actionCloudObj.writeDownload({picid:_id,classid})},fail: err => {if (err.errMsg == 'saveImageToPhotosAlbum:fail cancel') {uni.showToast({title: '保存失败,请重新点击下载',icon: "none"})return;}uni.showModal({title: "授权提示",content: "需要授权保存相册",success: res => {if (res.confirm) {uni.openSetting({success: (setting) => {console.log(setting);if (setting.authSetting['scope.writePhotosAlbum']) {uni.showToast({title: "获取授权成功",icon: "none"})} else {uni.showToast({title: "获取权限失败",icon: "none"})}}})}}})},complete: () => {uni.hideLoading();}})},fail(err) {console.log(err);}})} catch (err) {console.log(err);uni.hideLoading();}// #endif
}

该方法同时也给uni.downloadFile增加了fail错误的执行方法,在之前代码中忘了加这个错误的返回值了,所以找了半天原因才知道uni.getImageInfo不支持webp格式。

注意:
uni.downloadFile()该API传递的参数是url,这个是你服务器返回的地址,success返回的临时地址,放在tempFilePath属性内,使用uni.saveImageToPhotosAlbum()存入相册时,注意改一下filePath=res.tempFilePath。

如果文章帮助到你,请记得给点赞支持一下哦。


http://www.ppmy.cn/news/1556982.html

相关文章

VSCode如何修改默认扩展路径和用户文件夹目录到D盘

在使用Visual Studio Code(VSCode)时,随着安装的扩展和用户数据的增多,C盘的空间可能会逐渐紧张。为了优化存储管理,将VSCode的默认扩展路径和用户文件夹目录迁移到D盘是一个有效的解决方案。以下是详细的操作步骤&…

微软 Phi-4:小型模型的推理能力大突破

在人工智能领域,语言模型的发展日新月异。微软作为行业的重要参与者,一直致力于推动语言模型技术的进步。近日,微软推出了最新的小型语言模型 Phi-4,这款模型以其卓越的复杂推理能力和在数学领域的出色表现,引起了广泛…

高级java每日一道面试题-2024年12月20日-Spring篇-Autowired和Resource注解的区别?

如果有遗漏,评论区告诉我进行补充 面试官: Autowired和Resource关键字的区别? 我回答: 在Java高级面试中,Autowired和Resource是两个经常被提到的注解,它们主要用于Spring框架中的依赖注入。下面是对这两个注解的详细解释和它们之间的区别&#xff1…

如何创建属于自己的大语言模型:从零开始的指南

如何创建属于自己的大语言模型:从零开始的指南 为什么要创建自己的大语言模型? 随着人工智能的快速发展,大语言模型(LLM)在各种场景中表现出了卓越的能力,例如文本生成、对话交互和内容总结等。虽然市场上…

Unity复刻胡闹厨房复盘 模块一 新输入系统订阅链与重绑定

本文仅作学习交流,不做任何商业用途 郑重感谢siki老师的汉化教程与代码猴的免费教程以及搬运烤肉的小伙伴 版本:Unity6 模板:3D 核心 渲染管线:URP ------------------------------…

java线程共享模型之管程(synchronized原理、wait-notify、park方法)

文章目录 前言一、 变量的线程安全分析1.1 成员变量与静态变量是否线程安全?1.2 局部变量是否线程安全?1.3 局部变量线程安全分析具体举例:1. 局部变量引用的对象没有逃离方法作用域 :2. 局部变量引用的对象逃离了方法作用域 &…

C++设计模式:组合模式(公司架构案例)

组合模式是一种非常有用的设计模式,用于解决**“部分-整体”**问题。它允许我们用树形结构来表示对象的层次结构,并且让客户端可以统一地操作单个对象和组合对象。 组合模式的核心思想 什么是组合模式? 组合模式的目的是将对象组织成树形结…

多音轨视频使用FFmpeg删除不要音轨方法

近期给孩子找宫崎骏动画,但是有很多是多音轨视频但是默认的都是日语,电视上看没办法所以只能下载后删除音轨文件只保留中文。 方法分两步,先安装FFmpeg在转文件即可。 第一步FFmpeg安装 FFmpeg是一个开源项目,包含了处理视频的…