为什么电容器将所有内容保存到 IndexedDB 而不是 Android 上的 sd 卡?

Why is capacitor saving everything to IndexedDB instead on sdcard on Android?

我正在将 Angular 9 与 ionic5 一起使用,我正试图在我的 Android 9 设备上保存一个文件。不幸的是,每次我尝试使用 Capacitor 写入文件时,文件都会保存到 IndexedDB 而不是 disc/sdcard。有什么方法可以告诉 ionic 我想保存到 sdcard and/or 修复我的代码?

保存文件的代码

const fileName = decodeURIComponent(attachment.Name);

const savedFile = await Filesystem.writeFile({
    path: fileName,  // filename.png
    data: attachment.Content,  // base64 encoded png file
    directory: FilesystemDirectory.ExternalStorage,
});
console.log(savedFile.uri);

权限

应用程序应具有写入 SD 卡的权限,因为这是在 AndroidManifest.xml:

中定义的
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

预期结果

根据documentation,这应该将文件保存到sdcard的根目录。

实际结果

执行此操作时,返回的 URI 为 /EXTERNAL_STORAGE/filename.png,但该文件不存在于 sdcard 上,因为它保存在 IndexedDB 中,如 Chrome Inspector 所附的屏幕截图所示我的 Android 上的应用程序 运行:

在我写完这个问题后,Whosebug 能够找到一个similar one,但没有解决,但回答了我的问题。

解决方案是确保您使用 Plugins 而不是 import:

正确

const { Filesystem } = Plugins;

不正确

import { Filesystem } from '@capacitor/core';