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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:22:28