我有一个用 ionic/Angular 编写的应用程序。在我的应用程序中,我必须下载 Excel 文件。
我的服务器返回 json,其中包含 base64 格式的数据、文件名和 mimetype。在 ionic 上,我下载这样的文件:
return http.post(url, json, {headers : headers}).pipe(
tap(async data => {
var blob;
data['data'] = atob(data['data'])
const ia = new Uint8Array(data['data'].length)
for (let i = 0; i < data['data'].length; i++)
ia[i] = data['data'].charCodeAt(i)
var blob = new Blob([ia], { type: data['type'] })
const url = window.URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.download = data['fileName'];
a.click();
setTimeout(function(){ window.URL.revokeObjectURL(url); }, 30000);
}),
);
它在我的电脑上运行良好,但在 Android 和 iOS 上不起作用。在 iOS 上我遇到这个错误:
打开网址失败 blob:capacitor://localhost/cdb2a66c-5d46-48c7-ba16-ed83784cd8ed: 错误 域=NSOSStatusErrorDomain代码=-10814“(空)” 用户信息={_LSLine=277,_LSFunction=-[_LSDOpenClient openURL:fileHandle:options:completionHandler:]}
有人可以帮助我吗?看起来像是 iOS/Android 上的限制。有其他解决方案来下载文件吗?
capacitor/Filesystem
和 capacitor-community/file-opener
包一起使用将满足您在这种情况下的要求,如果平台是移动的,您可以将 blob 转换为 datauristring
或 base64
并使用此链接中接受的答案(Capacitor从api下载并打开文件),您可以使用路径Directory.Cache
而不是Directory.Documents
来保存文件,以便您可以在任何系统默认应用程序中下载并打开文件