最近在做微信小程序开发的时候,有一个在线拍照上传的功能要做。原本好好的功能,调试代码几次后发现,拍照上传功能失效了。经过不断的排查发现,原来是小程序的本地存储满了。
报错信息如下:
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方法进行存储。