2016-08-01 81 views
2

我用$ cordovaFile中的writeFile(path,file,data,replace)方法写入新文件(pdf,jpg,text)。 作为一个数据我从宁静的服务获得数据流..(它看起来像%PDF-1.5↵% ↵10obj↵..) 问题是我可以写一个文件,但它作为一个空白打开pdf,但文件大小是正确的。 用于数据字段我使用的数据流本身,blob对象(VAR团块=新斑点([数据],{类型: '应用/ PDF'});),

这是我的代码

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"); 
});   

请帮我....任何想法...?

+0

您是否曾尝试先创建文本文件? –

回答

1

使用此方法文本文件可以正确写入。问题是.pdf .png文件写入。所以我用这个方法来写文件。这对我行得通。

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; 
}