我正在使用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數據庫,所以也許解決方案是將二進制數據粘貼到某處並從那裏顯示它?麻煩是我不知道如何顯示它。