分享一次反复出现“getImageInfo:fail file not found”的排查过程与最终原因
今天在微信小程序开发者工具中调试代码时,突然发现小程序中原本一直正常的海报模板功能异常,因为优先加载的是生成小程序码的接口,开始误以为是小程序码的接口出现异常,后来反复排查,发现wx.getImageInfo居然加载所有图片都不正常,且无任何反应。 对wx.getImageInfo增加fail输出后,发现,所有的请求图片均返回相同结果: 1)控制台中请求记录,显示请求到的图片地址,并正确返回了图片数据2)getImageInfo函数最终处理结果始终是:getImageInfo:fail file not found 通常wx.getImageInfo加载图片异常,我们会说请求域名是否加在downloadfile的列表中,很显然,这种基础设置问题不难第一时间排查。去除合法域名验证也不难判断问题。 经过各式花式排查: 1.检查后台业务域名、下载域名相关设置 2.反复勾选IDE中“不检验合法域名、Web-VIEW(业务域名)、TLS版本以及HTTPS证书测试” 3.检查域名HTTPS是否过期 4.更换各种图片URL对比测试 5.官方最基础代码片段测试,始终亦不正常 6.开放社区论坛发帖求证,朋友们反馈一切正常。 7.升级IDE版本测试 8.重启电脑 测试 9.各种清理缓存设置 10.真机调试正常 [图片] [图片] [图片] 有点到死胡同了,确实找不出原因,只好研究微信开发者工具IDE的本地缓存设置和试图查询wx.getImageInfo有没有相关源码分析来分析其机制。 后来想到wx.getImageInfo的本质过程是:先下载远程图片到缓存目录,然后再读取目录中的图片。所以测试wx.downloadFile下载图片,获取临时路径后,再用wx.getImageInfo获取信息,发现依然结果是找不到文件,甚至用wx.getFileInfo也读不到文件。 这时候,想到会不会是下载的临时文件目录磁盘满了,文件没缓存下来,或者是不是权限不够,读不到。 还好,电脑上有everything这个软件,直接搜索缓存文件名,就搜索到缓存文件夹了,发现N次测试,大量缓存文件在里面 [图片] 看来文件夹内数据清理后,重新调用wx.getImageInfo发现文件其实缓存了的,但是仍然输出getImageInfo:fail file not found,说明前半程缓存成功了,但读取失败。检查WINDOWS文件夹权限,没有什么异常,这时突然看到文件夹目录中的UserData字样,突然想到,测试了这么久,唯独没有退出开发者用户来测试,会不会是用户权限有关。 退出开发者,重新登陆,一下子,天下太平了,终于正常了。 [图片] 原来真正的原因是:可能由于本地多项目切换、或者电脑运行久了或者一些杂七杂八的原因,IDE上开发者登陆态串了,所以wx.getImageInfo但读取缓存图片时失败的(wx.getImageInfo可能是缓存图片环节没有用户验证,而读取时有验证,所以读不到图片了)。 排查过程中更神奇的是:一直排查不到原因,就关了IDE,合上电脑去吃饭了,回来时开IDE第一时间测试,在那一秒瞬间,正常了,我以为恢复了,就把论坛里的帖子删除了,结果再进去一排查,又异常了。。。 看来串台这种事。。。可以理解为bug,也可以理解为电脑用久了,各种可能性,都算正常吧。。。。