Ionic Capacitor Android端读取assets中PDF提示文件不存在求助
解决Ionic Capacitor Android端读取Assets目录PDF文件报错问题
问题分析
你的代码在iOS端正常运行,但Android端触发文件不存在错误,核心原因是Capacitor Filesystem插件读取应用内部assets文件时的路径配置逻辑有误,且你添加的外部存储权限属于冗余配置(应用自身assets目录属于内部存储,无需申请READ_EXTERNAL_STORAGE/WRITE_EXTERNAL_STORAGE权限)。
解决方案
1. 修正Filesystem读取逻辑
不要直接拼接applicationDirectory绝对路径,而是通过指定directory参数定位应用内部目录,配合相对路径读取文件:
// 先导入依赖 import { Filesystem, FilesystemDirectory } from '@capacitor/filesystem'; async openpdf(val) { // val = '/assets/pdf/sample1.pdf' // 构造相对于Application目录的路径:public/assets/pdf/sample1.pdf const relativeFilePath = 'public' + val; try { const file = await Filesystem.readFile({ path: relativeFilePath, directory: FilesystemDirectory.Application }); // 后续处理文件内容(如转Blob展示等) } catch (err) { console.error('读取文件失败:', err); } }
2. 移除冗余权限
由于读取的是应用自身assets目录的文件,无需外部存储权限,建议从AndroidManifest.xml中删除以下配置:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3. 验证路径正确性
若问题仍存在,可打印路径参数确认匹配度:
console.log('待读取文件路径:', relativeFilePath);
确保路径与Android端实际文件位置/src/main/assets/public/assets/pdf/sample1.pdf对应(相对于applicationDirectory的路径即为public/assets/pdf/sample1.pdf)。
内容的提问来源于stack exchange,提问作者skid
相关产品推荐
相关产品推荐

