近期遇到线上用户反馈小程序某个业务流程卡死,经过本人排除,发现问题出现在wx.getFileSystemManager文件管理器这个模块没有正常完成读写。通过和用户调试(真的是幸运,用户竟然没骂娘不说,还能耐着性子帮我做联调),发现问题出现在设置文件缓存这个方法内,再细致调试,发现在写入文件时,错误码为‘1300202’,查询文档发现是储存空间不够了,通过“wx.getStorageInfo”获取用户的储存空间大小为10M。我当时就纳闷了,wx.getFileSystemManager这个api文档上不是说的上限为100M嘛,怎么又只有10M了?去问AI,发现还有个“沙盒环境”这个玩意,每个小程序只分配了10M的存储空间大小。那我这样需要存储比较大的数据量的需求场景应该如何解决这个问题呢(其实后面和用户调试,数据量也没有想象中那么大,转换字符串长度发现也不过就几百kb至1M不到)。目前我让用户自己清理了微信后,能够正常读写文件缓存了。所以这个wx.getFileSystemManager文件管理器的api到底能不能读写100M以内的缓存数据?这个“沙盒环境”10M存储空间的限制有没有方案能绕过?如果无法绕过的话,那你wx.getFileSystemManager这个api和wx.setStorage这个api的优势又是什么?
const storgSetFile = function (params) {
var fs = wx.getFileSystemManager();
const filePath = `${wx.env.USER_DATA_PATH}/test.json`;
return new Promise(function(resolve, reject) {
fs.access({
path: filePath,
success(res) {
console.log('查询缓存文件成功--------')
fs.readFile({
filePath: filePath,
encoding: 'utf8',
position: 0,
success(res) {
//...
},
fail(res) {
console.log('读取缓存文件失败--------')
resolve({errCode:-1,msg:'error',data:res})
}
})
},
fail(res){
console.log('查询缓存文件失败--------')
console.log('错认类型码',res.errno)
if(res.errno=='1300002'){
fs.writeFile({
filePath: filePath,
data: JSON.stringify(params),
encoding: 'utf8',
success(res) {
resolve(res)
},
fail(res) {
console.log('查询文件失败后,尝试写入新文件,写入缓存文件失败--------')
console.log('写入失败错误内容',JSON.stringify(res))
if(res.errno == '1300202'){
console.log('准备获取微信储存空间大小')
wx.getStorageInfo({
success: (succ) => {
console.log('获取微信储存空间成功-------')
console.log(JSON.stringify(succ))
// 计算剩余空间 (单位: KB)
const remainingSpace = succ.limitSize - succ.currentSize;
console.log(`剩余存储空间: ${remainingSpace}KB`);
resolve({errCode:-1,msg:'error',data:res})
},
fail(err){
console.log(`获取存储空间失败`,JSON.stringify(err));
resolve({errCode:-1,msg:'error',data:res})
}
});
}else{
resolve({errCode:-1,msg:'error',data:res})
}
}
})
}
},
})
})
}
