You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 11 作用域存储下Cordova读取图片提示不存在如何解决

Android 11 Cordova读取应用沙箱图片不存在问题解决方案

问题复现代码

window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, function success(dirEntry) {
    dirEntry.getFile(value, { create: false, exclusive: false }, 
        function fileExist(fileEntry){
            element.attr('src', fileEntry.toURL());
        }, 
        function fileDoesNotExist(){
            alert('Image not found' + value);
        });
    }, 
    function fail(evt) {
        alert('error: ' + evt.target.error.code);
    }
);

可能的问题原因

  • 路径不匹配:首先确认你存储图片时用的目录和读取时的cordova.file.cacheDirectory是否完全一致。Android 11对Cordova的存储路径映射做了调整,很多开发者存储时用的是cordova.file.externalCacheDirectory、cordova.file.dataDirectory等其他沙箱路径,读取时选错目录自然找不到文件。
  • 文件名大小写不匹配:Android沙箱文件系统大小写敏感,你传入的value参数的文件名大小写必须和实际存储的完全一致,例如实际文件是Avatar.png的话,传avatar.png会直接判定文件不存在。
  • Cordova文件插件版本未适配系统版本:低于v6.0.0版本的cordova-plugin-file没有完全兼容Android 11的分区存储规则,如果你的App targetSdkVersion >=30,需要将插件升级到v7.0以上版本,否则会出现路径解析错误。
  • 参数包含非法路径前缀:如果value参数不是单纯的文件名,而是带了子目录的相对路径,需要确保对应的父目录已经提前创建,getFile默认不会自动创建父目录,父目录不存在时也会触发文件不存在的回调。

排查建议

  • 先在存储文件和读取文件的位置分别打印对应目录的绝对路径,确认二者路径完全一致
  • 先写死一个确认存在的文件名传入value测试,排除参数传递错误的问题
  • 把失败回调的错误码完整打印出来对照定位:错误码1代表文件/路径不存在,错误码3代表找不到对应父目录

内容的提问来源于stack exchange,提问作者user3907580

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:45:03