$ cordovaFile.writeFile写入空白文件

时间:2016-08-01 05:46:25

标签: cordova pdf local-storage device writefile

我在$ cordovaFile中使用了writeFile(path,file,data,replace)方法来编写新文件(pdf,jpg,text)。 作为一个数据,我从宁静的服务中得到数据流..(看起来像%PDF-1.5↵% ↵10对象..) 问题是我可以写一个文件,但它打开为空白pdf,但文件大小是正确的。 对于数据字段我使用了数据流本身,blob对象(var blob = new Blob([data],{type:'application / 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");
});          

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

1 个答案:

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