在 Android/ios 上使用 ionic 下载 blob

问题描述 投票:0回答:1

我有一个用 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 上的限制。有其他解决方案来下载文件吗?

angular ionic-framework
1个回答
0
投票

capacitor/Filesystem
capacitor-community/file-opener
包一起使用将满足您在这种情况下的要求,如果平台是移动的,您可以将 blob 转换为
datauristring
base64
并使用此链接中接受的答案(Capacitor从api下载并打开文件),您可以使用路径
Directory.Cache
而不是
Directory.Documents
来保存文件,以便您可以在任何系统默认应用程序中下载并打开文件

© www.soinside.com 2019 - 2024. All rights reserved.