我的编程空间,编程开发者的网络收藏夹
学习永远不晚

小程序报错saveimagetophotosalbum:fail invalid file type如何解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

小程序报错saveimagetophotosalbum:fail invalid file type如何解决

微信小程序 保存图片

在微信小程序中要保存图片到本地相册,需要获取相册权限。总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.downloadFile,wx.saveImageToPhotosAlbum

wx.getSetting
获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限。
wx.authorize
提前向用户发起授权请求。调用后会立刻弹窗询问用户是否同意授权小程序使用某项功能或获取用户的某些数据,但不会实际调用对应接口。如果用户之前已经同意授权,则不会出现弹窗,直接返回成功。更多用法详见 用户授权。 > 小程序插件可以使用 wx.authorizeForMiniProgram
wx.openSetting
调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。
wx.downloadFile(Object object)
下载文件资源到本地。客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径),单次下载允许的最大文件为 200MB。
wx.saveImageToPhotosAlbum
保存图片到系统相册。

wxml部分

<button  type="primary" bindtap="downloadImg" style="margin-top:50rpx">下载图片</button>

普通下载图片(部分安卓手机会存在下载失败)

 //下载图片  downloadImg(){  let that= this;    wx.downloadFile({      url: that.data.imgUrl,//图片的地址      success:function(res){        const tempFilePath = res.tempFilePath  //通过res中的tempFilePath 得到需要下载的图片地址        wx.saveImageToPhotosAlbum({          filePath: tempFilePath,  //设置下载图片的地址          success:function(){          }        })      }    })  },  

wx.downloadFile 保存图片的时候,打印成功回调里边会有tempFilePath 后缀名不正确格式。(Android机会有这种情况,iOS不清楚),就回导致后续wx.saveImageToPhotosAlbum方法是出现错误:文件格式类型错误问题

安卓下载失败解决方案

downloadImg() {    wx.showLoading({      title: '保存中...'    })    let that= this;const url = wx.env.USER_DATA_PATH + "/" + new Date().getTime().toString()+ that.data.imgsArr[i].slice(that.data.imgsArr[i].lastIndexOf('.'))    wx.downloadFile({ //下载文件资源到本地      url: that.data.url, // 网络图片的地址 这里是需要下载的图片地址!!!      filePath: url ,      success: function (res) {        if (res.statusCode === 200) {          wx.saveImageToPhotosAlbum({            filePath: res.filePath,            success: function (data) {              wx.hideLoading()              wx.showToast({                title: '保存成功',                icon: 'success',                duration: 2000              })               let fileMgr = wx.getFileSystemManager()              fileMgr.unlink({                filePath: res.filePath,                success: () => {                  console.log('删除缓存成功!')                }              })            },            fail: function (err) {              if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny" || err.errMsg === "saveImageToPhotosAlbum:fail:auth denied") {                //当初用户拒绝,再次发起授权                wx.showModal({                  title: '提示',                  content: '需要您授权保存相册',                  showCancel: false,                  success: () => {                    wx.openSetting({                      success(settingdata) {                        if (settingdata.authSetting['scope.writePhotosAlbum']) {                          wx.showModal({title: '提示',content: '获取权限成功,再次点击按钮即可保存',showCancel: false,                          })                        } else {                          wx.showModal({title: '提示',content: '获取权限失败,将无法保存到相册',showCancel: false,                          })                        }                      },                      fail(failData) {                        console.log("failData", failData)                      },                      complete(finishData) {                        console.log("finishData", finishData)                      }                    })                  }                })              }            },            complete(res) {              console.log(res);              wx.hideLoading()            }          })        }      }    })  }

图片文件流显示并下载
有时请求接口后端返回的图片格式不是一个完整的url,也不是其他直接能显示的图片格式,而是直接一张图片,即返回为文件流的格式。需要对这个数据进行如下处理:

getImg(){let that = this wx.request({    url: that.data.url,    responseType: 'arraybuffer', //将数据转为类似二进制数组的格式    success:res=>{        //进行转码        let url = 'data:image/png;base64,' + wx.arrayBufferToBase64(res.data)        that.setData({            imgUrl:url        })    } })}

图片途径已经转成已经base64,直接下载必然失败。在原有图片下载的基础上,判断是否为base64,如果是则按照文件下载那样解码后下载,如果不是那么用普通下载即可

  //判断base64并下载图片  downloadImg() {  let that = this     var save = wx.getFileSystemManager();    var number = Math.random();    //判断是否为base64    if( that.data.imgUrl.includes("base64")){        save.writeFile({        filePath: wx.env.USER_DATA_PATH + '/test' + number + '.png',        data: that.data.imgUrl.replace('data:image/png;base64,', ''),        encoding: 'base64',        success: res => {          wx.saveImageToPhotosAlbum({ //保存为png格式到相册            filePath: wx.env.USER_DATA_PATH + '/test' + number + '.png',            success: function (res) {              wx.hideLoading()              wx.showToast({                title: '保存成功',                icon: 'success',                duration: 2000, //提示的延迟时间,单位毫秒,默认:2500              })            },            fail: function (err) {              wx.hideLoading()            }          })        },        fail: err => {          console.log(err)        }      })    }else{      wx.downloadFile({        url: that.data.imgUrl,//图片的地址        success:function(res){          const tempFilePath = res.tempFilePath          wx.saveImageToPhotosAlbum({            filePath: tempFilePath,  //设置下载图片的地址            success:function(){              wx.hideLoading()              wx.showToast({                title: '保存成功',                icon: 'success',                duration: 2000, //提示的延迟时间,单位毫秒,默认:2500              })            },            fail: function (err) {              wx.hideLoading()            }          })        }      })    }  },

注意

在开发者工具和手机打开调试都可以成功保存图片,但是关了调试,就不可以保存。这个时候需要登录到微信小程序后台(开发->开发设置),查看downloadFile合法域名 中有没有配置合法域名,也就是下载图片路径的白名单,你的图片路径域名需要在这里配置,才可以!然后就可以保存图片!!!

小程序其他知识点

小程序上传图片

微信小程序自动检测版本并提示更新新版本

来源地址:https://blog.csdn.net/weixin_45357661/article/details/128169198

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

小程序报错saveimagetophotosalbum:fail invalid file type如何解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

小程序报错saveimagetophotosalbum:fail invalid file type如何解决

微信小程序 保存图片 在微信小程序中要保存图片到本地相册,需要获取相册权限。总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.downloadFile,
2023-08-23

eclipse运行android程序报错如何解决

运行Android程序出错可能有多种原因,下面列举一些常见的解决方法:1. 确保正确配置了Android环境。检查是否正确安装了JDK、Android SDK以及相关工具,同时确认是否正确配置了环境变量。2. 检查项目的依赖库。确认项目中所
2023-09-29

windows hello安装程序报错如何解决

这篇文章主要介绍了windows hello安装程序报错如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇windows hello安装程序报错如何解决文章都会有所收获,下面我们一起来看看吧。windows
2023-07-01

小程序tempfileurl为空如何解决

小程序的tempfileurl为空通常是因为临时文件在上传过程中出现了错误或者丢失导致的。解决这个问题的方法包括:重新上传文件:尝试重新上传文件,确保文件上传过程中没有出现任何错误。检查网络连接:确保手机或者电脑的网络连接稳定,避免在上传过
小程序tempfileurl为空如何解决
2024-04-09

MySQL报错The server quit without updating PID file如何解决

这篇文章主要介绍“MySQL报错The server quit without updating PID file如何解决”,在日常操作中,相信很多人在MySQL报错The server quit without updating PID
2023-07-05

uni-app生成微信小程序报错怎么解决

本文小编为大家详细介绍“uni-app生成微信小程序报错怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“uni-app生成微信小程序报错怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.不允许id
2023-06-29

redis反序列化报错如何解决

这篇文章主要介绍“redis反序列化报错如何解决”,在日常操作中,相信很多人在redis反序列化报错如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”redis反序列化报错如何解决”的疑惑有所帮助!接下来
2023-07-05

小程序TabBar不出现如何解决

本文小编为大家详细介绍“小程序TabBar不出现如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“小程序TabBar不出现如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。小程序TabBar不出现的原因
2023-06-26

小程序中reLaunch跳转报错如何处理

这篇文章将为大家详细讲解有关小程序中reLaunch跳转报错如何处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本篇文章给大家介绍一下微信小程序开发中使用reLaunch跳转时报错的解决步骤,希望对大家
2023-06-21

windows错误报告发送程序问题如何解决

要解决Windows错误报告发送程序的问题,可以尝试以下方法:1. 检查系统更新:确保Windows操作系统和相关的驱动程序都是最新的版本。打开Windows更新设置,检查是否有可用的更新,然后安装它们。2. 重新启动电脑:有时候,错误报告
2023-09-28

File 'file_name' already exists - 如何解决MySQL报错:文件已存在

在使用MySQL数据库时,有时候可能会遇到一个报错信息:File 'file_name' already exists,这意味着文件已经存在。这个错误通常是由于在数据库创建表或导入数据时遇到的问题。本文将介绍解决这个问题的方法,并提供具体的
2023-10-21

小程序wepy上拉下拉如何解决

这篇文章主要介绍了小程序wepy上拉下拉如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇小程序wepy上拉下拉如何解决文章都会有所收获,下面我们一起来看看吧。列表上拉下拉加载数据是再常见不过的功能,第一个
2023-06-26

小程序ios下拉空白如何解决

本文小编为大家详细介绍“小程序ios下拉空白如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“小程序ios下拉空白如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。方式一:  可以在page.json文
2023-06-26

explorer.exe应用程序错误如何解决

这篇“explorer.exe应用程序错误如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“explorer.exe应用
2023-07-02

windows驱动程序错误如何解决

今天小编给大家分享一下windows驱动程序错误如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。驱动程序错误解决方法:
2023-06-30

微信小程序获取二维码报错47001怎么解决

错误码47001是指传入的参数不合法。要解决这个问题,需要检查以下几个方面:检查参数是否正确:确保传入的参数符合微信小程序的规范要求,例如判断参数的类型、长度和格式等。检查权限:如果是获取小程序码,需要确保当前用户已经获得了相应的权限,例如
2023-10-26

c++编程报错error如何解决

要解决C++编程报错,首先需要确定错误的来源。常见的C++编程错误包括语法错误、逻辑错误和运行时错误。以下是一些常见的解决方法:语法错误:检查代码中的拼写错误、缺少分号、括号匹配等。仔细阅读编译器给出的错误信息,在错误发生的行数和位置附近查
c++编程报错error如何解决
2023-10-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录