显示从Ionic / Angular中的API下载的PDF

时间:2015-12-28 16:29:47

标签: android angularjs cordova ionic

我需要点击一个API端点,它返回一个pdf文件(不是pdf的url,而是实际的数据),然后以某种方式在我的离子应用程序中显示这个pdf。理想情况下,我想将它交给其他应用程序,如手机的移动网络浏览器,但我也愿意尝试将其嵌入我的应用程序中。在iOS上,我只使用$ window.open(url),移动safari知道下载并显示返回的pdf。但是,Android尝试下载该文件然后告诉我,当我尝试打开它时无法打开它。

我还尝试将其嵌入到<embed>的应用中,但没有嵌入任何内容。但是,类似的方法适用于<img ng-src="url">中的图像。

我也尝试过使用cordova FileOpener2,但是在使用它时遇到了很多麻烦。如果这是正确的方法,我会愿意重新访问该方法。

我最接近的绝对只是将其发送到设备移动浏览器,因为它在iOS上完美运行。

1 个答案:

答案 0 :(得分:2)

我使用filetransfer和fileopener2解决了它。我的代码如下。我遇到的主要问题是我的config.xml文件中没有<access origin="cdvfile://*" />而没有正确安装ngCordova。

if (ionic.Platform.isIOS())
  $window.open(APIUrl, '_blank', 'location=no');
else if (ionic.Platform.isAndroid()) {

  var fileExtension = filename.substr(filename.lastIndexOf('.')+1);

  //I have a dictionary with this somewhere else
  var MIMEType = extToMime[fileExtension];


  var uri = encodeURI(APIurl);
  var fileURL = "cdvfile://localhost/persistent/file."+fileExtension;

  $cordovaFileTransfer.download(uri, fileURL, {}, true)
  .then(function(result) {
    $cordovaFileOpener2.open(
      fileURL,
      MIMEType
    ).then(function() {
      console.log("SUCCESS");
    }, function(e) {
      console.log("ERROR");
      console.log(JSON.stringify(e));
    });
  }, function(e) {
    console.log("Error: " + JSON.stringify(e));
  });
}