2013-04-15 76 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。

相關問題