2013-07-08 38 views
2

我試圖在PhoneGap中保存一個blob - 但這是普通的File API。我通過XHR從我的服務器獲得blob,它工作正常。 如果我創建一個img標籤並將src設置爲我的blob,則圖像顯示在我的屏幕上。將BLOB保存爲.txt但不適用於其他類型

我可以將blob保存到文件系統,但嘗試打開它們失敗。只有.txt才能正常工作。我必須在任何地方設置數據類型嗎?

我下載並保存功能,可以在這裏找到:http://pastebin.com/GrA2tRQt

總之我做了fileWriter.write(this.response);

感謝任何幫助提前!

回答

2

我自己解決了。以下是對那些感興趣的解決方案: 只需將responsetype設置爲arraybuffer即可。

 var xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
     if (xhr.readyState == 4) { // complete. 
      if (xhr.status >= 200 && xhr.status < 300) { 
       var data = this.response; 
       successCallback(data, fileName); 
      } else { 
       // response not successfull 
       var error = /<d:error/; 
       if (error.test(xhr.responseText)) { 
        console.log("ResponseText: " + xhr.responseText); 
       } else { 
        console.log("Kein ResponseText vorhanden"); 
       } 
      } 
     } 
    }; 
    xhr.open("GET", url, true); 
    xhr.responseType = 'arraybuffer'; 
    xhr.setRequestHeader("Authorization", "Basic " + authToken); 
    xhr.send(); 

然後你就可以在你的successCallback其保存爲以下幾點:

performSave = function (data, filename) { 
console.log("perform Save"); 
console.log(data); 
window.requestFileSystem(
       LocalFileSystem.PERSISTENT, 0, 
       function onFileSystemSuccess(fileSystem) { 
        fileSystem.root.getFile(filename, { create: true }, function (fileEntry) { 
         fileEntry.remove(
          fileEntry.createWriter(function (fileWriter) { 
          fileWriter.onwriteend = function (e) { 
           cloud.functions.performSaveSuccess(); 
          }; 
          fileWriter.onerror = function (e) { 
           cloud.functions.performSaveError(e); 
          }; 
          fileWriter.write(data); 
         }, errorCallback)); 
         ; 
        }, errorCallback); 
       }) 

}

希望這有助於任何人

相關問題