2016-08-01 36 views
2

Ich habe writeFile (Pfad, Datei, Daten, ersetzen) -Methode in $ CordovaFile, um neue Datei (PDF, JPG, Text) zu schreiben. als Daten habe ich Datenstrom von Restful Service .. (es sieht aus wie% PDF-1.5↵% ↵1 0 obj↵ ..) Das Problem ist, ich kann eine Datei schreiben, aber es öffnet sich als leer pdf aber Dateigröße ist korrekt. Ich für Datenfeld verwendet, selbst Datenstrom, Blob-Objekt (var blob = new Blob ([Daten], {type: 'application/pdf'});),

Dies ist mein Code

var path = cordova.file.externalRootDirectory; 
$cordovaFile.writeFile(path, "myCreatedPdf.pdf", blob, true) 
.then(function(success){ 
    console.log("file"); 
    $cordovaFileOpener2.open(
     success.target.localURL,'application/pdf' 
    ); 
}, function (error) { 
    console.log("error"); 
});   

Bitte helfen Sie mir .... irgendwelche Ideen ...?

+0

hatten Sie zuerst versucht, eine Textdatei zu erstellen? –

Antwort

1

Mit dieser Methode können Textdateien korrekt geschrieben werden. Problem war .pdf .png Datei schreiben. also benutze ich diese Methode, um eine Datei zu schreiben. das ist für mich in Ordnung.

function saveFile(pdfBlob, fileName) { 
    var deferred = $q.defer(); 

    var filePath = ""; 
    try { 
     console.log('SaveFile: requestFileSystem'); 
     window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 
    } catch (e) { 
     console.error('SaveFile_Err: ' + e.message); 
     deferred.reject(e); 
     throw ({ code: -1401, message: 'unable to save report file' }); 
    } 


    function gotFS(fileSystem) { 
     fileSystem.root.getDirectory("TokenReader", { create: true }, gotDir); 
    } 

    function gotDir(dirEntry) { 
     //console.error('SaveFile: gotFS --> getFile'); 
     //dirEntry.getFile("rptSampleNew.pdf", {create: true, exclusive: false}, gotFileEntry, fail); 
     dirEntry.getFile(fileName, { create: true, exclusive: false }, gotFileEntry, fail); 
    } 

    function gotFileEntry(fileEntry) { 
     //console.error('SaveFile: gotFileEntry --> (filePath) --> createWriter'); 
     filePath = fileEntry.toURL(); 
     fileEntry.createWriter(gotFileWriter, fail); 
    } 

    function gotFileWriter(writer) { 
     //console.error('SaveFile: gotFileWriter --> write --> onWriteEnd(resolve)'); 
     writer.onwriteend = function (evt) { 
      $timeout(function() { 
       deferred.resolve(filePath); 
      }, 100); 
     }; 

     writer.onerror = function (e) { 
      console.log('writer error: ' + e.toString()); 
      deferred.reject(e); 
     }; 

     writer.write(pdfBlob); 
    } 

    function fail(error) { 
     console.log(error.code); 
     deferred.reject(error); 
    } 

    return deferred.promise; 
}