Android平台Cordova File插件图片下载功能失效求助
未等待Cordova设备就绪事件
Cordova所有API必须在deviceready事件触发后才能调用,若直接在页面加载阶段执行下载代码,插件尚未完成初始化,会导致无响应。检查你的JavaScript代码是否包裹在以下回调内:document.addEventListener("deviceready", function() { // 下载逻辑写在这里 }, false);权限配置或动态申请遗漏
即使手动授予权限,高版本Android的权限模型也可能需要额外配置:- 在
config.xml中补充Android平台的权限声明(适配Android 10+):<platform name="android"> <config-file parent="/manifest" target="AndroidManifest.xml"> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <application android:requestLegacyExternalStorage="true" /> </config-file> </platform> - Android 13+需动态申请媒体权限,而非通用存储权限,可通过
cordova-plugin-android-permissions插件实现动态授权。
- 在
文件路径未使用Cordova内置常量
直接使用硬编码绝对路径(如/sdcard/)在高版本Android中会被沙箱限制,必须使用cordova.file提供的路径常量,例如:// 正确示例:外部存储公共目录 const filePath = cordova.file.externalPublicDirectory + "/downloads/test.pdf";未添加错误回调排查问题
若仅编写成功回调,无反应时无法定位错误。给FileTransfer.download补充错误回调,并通过Chrome远程调试(chrome://inspect)查看控制台日志:fileTransfer.download( "https://example.com/file.pdf", filePath, function(entry) { console.log("下载完成:" + entry.fullPath); }, function(error) { console.error("下载错误详情:", error); // 错误码对应问题:1=连接错误,2=路径错误,3=文件已存在等 } );混淆File插件与FileTransfer插件
下载功能依赖cordova-plugin-file-transfer,而非仅cordova-plugin-file。执行以下命令确认插件安装状态:cordova plugin list未安装则执行
cordova plugin add cordova-plugin-file-transfer。Android模拟器存储挂载异常
部分模拟器默认未挂载外部存储,进入模拟器「设置-存储」检查是否有可用外部存储,或在创建AVD时选择带外部存储的系统镜像。HTTPS证书信任问题
若下载URL为HTTPS且证书未被系统信任,FileTransfer会默认拒绝请求。可临时开启trustAllHosts: true测试(生产环境禁用):fileTransfer.download( url, filePath, success, error, true, {} );
内容的提问来源于stack exchange,提问作者m1212

