【问题标题】:How to return a FileContent with FileReader from function in PhoneGap iOS?如何从 PhoneGap iOS 中的函数返回带有 FileReader 的 FileContent?
【发布时间】:2013-09-12 13:42:49
【问题描述】:

例如,如果我认为 fileReader 必须返回文件的内容值,我只返回空字符串。全局变量对我来说无法使用,只有局部变量。有可能吗?
我错了什么?

编辑:

function onDeviceReady() {    
    console.log("==> DEVICE READY");    
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFSSuccess, fileErrorMSG);    
}    

function onFSSuccess(fs) {    
    fileSystem = fs;    
}    

function readlocalFile(fileName) {    
    var core = "";    

    fileSystem.root.getFile(fileName, {create: false}, function(f) {    
        f.file(function(e) {    
            var reader = new FileReader();    
            reader.onloadend = function(evt) {    
                var res =  $.parseJSON(evt.target.result);    
                core = res;    
            };    
            reader.readAsText(e);    
        });//f.file()    
    }, fileErrorMSG);    

    return core;    
}     

function loadDefaultCore(url) {    
    if (url) {    
        var myCore = readlocalFile(url);    
        console.log(myCore); // **output - empty string!!!!!!!!**    
    } else {    
        alert('can not load default core');    
    }    
}    

谢谢!

【问题讨论】:

    标签: ios file cordova filereader


    【解决方案1】:

    嗯,有很多事情需要考虑。简而言之:

    1. 首先,要读取文件,您需要获取文件系统。
    2. 其次,成功后需要使用文件系统获取文件入口。
    3. 第三,成功后使用文件条目读取文件。

    这三个必须通过函数回调链接起来。

    你的文件没有被读取,你变得空了。 在 onFSSuccess 函数链被破坏后,我跟随链,没有调用 readLocalFile 函数,只需在将文件系统分配给我假设是全局变量的 fileSystem 变量后添加它。或者调用你的函数 loadDefaultCore,我不确定你真的想先调用哪个。

    如果您在每个函数中添加更多控制台日志消息,这将对您有所帮助,以便您可以轻松地实际调试问题。

    另外,您是否将您的文档甚至监听器附加到设备就绪功能? 控制台中有任何消息、错误警告吗?

    从 phonegap 文件 api 中,按照此操作,您将是安全的。检查您正在使用的 phonegap 版本的文档。

    http://docs.phonegap.com/en/2.4.0/cordova_file_file.md.html#FileReader

    <script type="text/javascript" charset="utf-8">
    
    // Wait for Cordova to load //function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); }
    
    // Cordova is ready //function onDeviceReady() { window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); }
    
    function gotFS(fileSystem) { fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail); }
    
    function gotFileEntry(fileEntry) { fileEntry.file(gotFile, fail); }
    
    function gotFile(file){ readDataUrl(file); readAsText(file); }
    
    function readDataUrl(file) { var reader = new FileReader(); reader.onloadend = function(evt) { console.log("Read as data URL"); console.log(evt.target.result); }; reader.readAsDataURL(file); }
    
    function readAsText(file) { var reader = new FileReader(); reader.onloadend = function(evt) { console.log("Read as text"); console.log(evt.target.result); }; reader.readAsText(file); }
    
    function fail(evt) { console.log(evt.target.error.code); }
    
    </script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-07
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多