首页 > 建站教程 > 小程序、公众号 >  微信小程序saveFile:fail the maximum size of the file storage limi正文

微信小程序saveFile:fail the maximum size of the file storage limi

问题描述:
最近在做微信小程序开发的时候,有一个在线拍照上传的功能要做。原本好好的功能,调试代码几次后发现,拍照上传功能失效了。经过不断的排查发现,原来是小程序的本地存储满了。

报错信息如下:
saveFile:fail the maximum size of the file storage limit is exceeded



代码如下:
wx.saveFile({
  tempFilePath: t.tempFilePath,
  success: function(t) {
   console.log('临时', t.tempFilePath, t.savedFilePath)
   e.fire("CardPhoto", t.savedFilePath)
   wx.navigateBack();
  },
  fail (e) {
   console.log('拍照保存失败', e)
  }
});
微信文档中描述的是 本地文件存储的大小限制为 10M

那么既然只能存10M,那么我们解决这个问题的思路,就是看下存了那些数据,是否可以删除。我这个项目每次都只存一张照片,那么居然也蛮,说明不是单个文件有10M,还是有多个文件存储,没有删除旧数据。

我们打印出fail里的e,可以看到



fileList里有多个文件。这些文件加起来超过10M,当然我上图的是刚刚添加的测试文件,原先的是有20几条数据,所以加起来就超过了10M了,导致无法再上传成功。

解决方案
我的案例里是每次只保存一个文件,这些久文件其实都是垃圾数据,没有被清空。所以我只需要把这些垃圾数据清除掉,然后每次添加新数据就行。

微信里有个wx.getSavedFileList,可以得到小程序本地存储的文件列表,再通过小程序文件api(wx.removeSavedFile)将垃圾文件删除即可。

具体代码如下:
wx.getSavedFileList({  // 获取文件列表
    success (res) {
      res.fileList.forEach((val, key) => { // 遍历文件列表里的数据
        // 删除存储的垃圾数据
        wx.removeSavedFile({
            filePath: val.filePath
        });
      })
    }
})
删除完成后,我们在进行wx.saveFile api方法进行存储。