Cod*_*uit 7 filesystems android download cordova capacitor
目标:我的应用程序创建一个 zip。用户将其下载到他们的设备上。
问题:它在 Electron 和浏览器上完美运行,但在 Android 上却不起作用
const fileHandle = await window.showSaveFilePicker({suggestedName: 'package.zip'});
const writable = await fileHandle.createWritable();
await writable.write(blob);
await writable.close();
Run Code Online (Sandbox Code Playgroud)
打开一个窗口来保存文件。适用于浏览器和Windows 应用程序。在Android上,没有任何反应。
const downloadUrl = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = downloadUrl;
link.target= '_blank';
link.download = 'package.zip';
document.body.appendChild(link);
link.click();
Run Code Online (Sandbox Code Playgroud)
打开一个窗口来保存文件。适用于浏览器和Windows 应用程序。对于Android来说,没有。AndroidStudio 日志:E/Capacitor:无法打开资产 URL
<a href="/assets/imgs/pack.zip" download>DOWNLOAD</a>
Run Code Online (Sandbox Code Playgroud)
适用于浏览器和Windows 应用程序。对于Android,没有什么,同样的错误。
const path = `${directory}/${name}`;
const blob = new Blob([file], {type: file.type});
const data = await this.blobToBase64(blob);
await Filesystem.writeFile({path, data, directory: Directory.Documents, encoding: Encoding.UTF8});
Run Code Online (Sandbox Code Playgroud)
使用文件系统(Directory.Documents)保存到用户的设备。我想避免,它对用户不友好并且不起作用,因为文件被转换为 base64 以供 Android 文件系统 API 使用。它们无法使用。:/
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
Run Code Online (Sandbox Code Playgroud)
包.json
"@capacitor/android": "^3.6.0",
"@capacitor/core": "^3.6.0",
"@capacitor/filesystem": "^1.1.0",
Run Code Online (Sandbox Code Playgroud)
小智 0
我设法让它与 FileSharer 插件一起使用。
在我的实现中,我通过 HTTP 请求检索文件,但 FileSharer 还支持共享来自 base64 源的文件。
它的作用是打开一个共享弹出窗口,允许用户将文件保存在文件系统上或与其他应用程序共享。
“@byteowls/capacitor-filesharer”:“^4.0.0”
这是我的实现:
openFile(params: { res: any; filename: string}) {
const file = new Blob([params.res], {type: 'application/octet-stream'});
if (!window.hasOwnProperty('cordova')) {
// Web implementation
} else {
const reader = new FileReader();
reader.onload = () => {
const dataUrl: any = reader?.result;
if (dataUrl) {
const base64 = dataUrl.split(',')[1];
FileSharer.share({
filename: params.filename,
base64Data: base64,
contentType: 'application/octet-stream',
});
}
};
reader.readAsDataURL(file);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |