2013-04-15 108 views
3

我正在使用Sencha Touch 2.1.1。当我的应用程序请求的PDF版本,服务器生成的PDF格式的二进制数据,其保持在一个缓冲区,最后用是否可以使用phonegap保存一个blob?

header('Content-Length: '.strlen($this->buffer)); 
header('Content-disposition: attachment; filename="'.$name.'"'); 

吐出它的浏览器,它与Web浏览器正常上网时,会导致一个那些'保存或打开'对话框将被浏览器显示。随着煎茶触摸,我可以从服务器获取一个blob,如下所示:

  var xhr = new XMLHttpRequest(); 
      console.log('new XMLHttpRequest'); 
      var url = 'http://bladhdeblah.com/ws/Download/'; 
      var params = "loginId=" + loginId + "&sId=" + surveyId; 
      xhr.open('POST', url, true); 
      xhr.responseType = 'blob'; 
      xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
      xhr.onload = function (e) { 
       if (this.status == 200) { 
        Ext.Viewport.setMasked(false); 
        blob = new Blob([this.response], {type: 'application/pdf'}); 
        console.log('new Blob'); 
        var cd = (this.getResponseHeader("Content-disposition")); 
        var filenameStart = cd.indexOf("\"") + 1; 
        var filename = cd.substring(filenameStart, cd.length - 1); 
        console.log('pdf filename is ' + filename); 
        if (Ext.os.is.Android) { 
         window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
        } 
       } 
       else { 
        LRS.util.common.displayAjaxFailure(this.response, 1); 
       } 


      }; 
      xhr.send(params) 
; 

我的问题是PhoneGap的显然不明白“新斑块”(Android上显示的logcat“遗漏的类型错误:非法的构造”)而且据我所知,无论如何,无论如何都不可能使用phonegap的文件编写器来写明白文字以外的任何内容(我在其他地方已经成功完成)。

我用Google搜索了一下,但找不到解决方案。使用WinJS,我已经能够使用Windows.Storage.Streams.RandomAccessStream.copyAsync获取blob并保存它,但在phonegap中找不到任何类似的功能。

我原以为肯定会有很多人希望他们的应用程序下载并保存图片,mp3或其他内容,所以我希望有一些手机大师能够指出我的解决方案。

我知道phonegap的FileTransfer,但是,如果我理解正确的话,我需要提供它与保存在服务器上的文件的网址。我可以更改服务器代码,以便保存pdf,但不希望进行此类更改。顺便说一下,我的应用程序使用SQLlite数据库,所以也许解决方案是将二进制数据粘贴到某处并从那里显示它?麻烦是我不知道如何显示它。

回答

1

而不是使用Blob,使用WebKitBlobBuilder。 BlobBuilder的一些例子可以在here找到。该链接表示BlobBuilder已经过时,但Android(至少4.1.2)尚未转移到Blob。

相关问题