**目标:**我的应用程序创建一个zip。用户将其下载到他们的设备上。
**问题:**它与Electron和浏览器完美兼容,但与Android不兼容
尝试1个窗口.showSaveFilePicker()
const fileHandle = await window.showSaveFilePicker({suggestedName: 'package.zip'});
const writable = await fileHandle.createWritable();
await writable.write(blob);
await writable.close();
打开一个窗口以保存文件。适用于浏览器和Windows应用程序。在Android上,没有任何React。
尝试2下载链接
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();
打开一个窗口以保存文件。适用于浏览器和Windows应用程序。适用于Android,无。AndroidStudio日志:E/Capacitor:无法打开资产URL
尝试3下载链接与本地文件(只是为了检查)
<a href="/assets/imgs/pack.zip" download>DOWNLOAD</a>
适用于浏览器和Windows应用程序。适用于Android,没有任何问题,同样的错误。
尝试4个备选方案
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});
使用文件系统(目录.文档)保存到用户的设备.我想避免,它不是用户友好的,不工作,因为文件被转换为base64由Android Filesktop 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"/>
package.json
"@capacitor/android": "^3.6.0",
"@capacitor/core": "^3.6.0",
"@capacitor/filesystem": "^1.1.0",
1条答案
按热度按时间gc0ot86w1#
我设法使它与FileSharer插件工作.
在我的实现中,我通过HTTP请求检索文件,但FileSharer也支持从base64源共享文件。
它所做的是打开一个共享弹出窗口,允许用户保存文件系统上的文件或与其他应用程序共享它。
"@byteowls/capacitor-filesharer": "^4.0.0"
下面是我的实现: