Phonegap fileTransfer.Download无法在ios phonegap 3.0上运行

时间:2014-06-22 16:02:49

标签: android ios jquery-mobile cordova

我正在使用JQM开发应用程序,然后使用build.phonegap.com,我正在构建应用程序。

我有一项功能可以从服务器下载音频文件,然后在应用程序中播放。

它在android中完美运行。

我尝试了所有可能性使其发挥作用。

可以帮助一些人。

这是我的完整文件处理代码

fileSystem.root.getDirectory("auidofiles", {
        create : true,
        exclusive : false
    }, function(dirEntry) {     


        dirEntry.getFile(mp3_file, {
            create : false,
            exclusive : false
        }, function(fileEntry) {    

            alert("File Already downloaded");               

            if (device.platform == "Android") { 
                FILEPATH = fileEntry.fullPath;
                //FILEPATH = fileEntry.toURI();
                playAudio();                    
            } else {
                var filePathLocal1 = getPhoneGapPath() + "auidofiles/" +  mp3_file; 
                //var filePathLocal = fileSystem.root.toURL() + "auidofiles/" +  mp3_file;  
                //alert("Ios File Path:" + filePathLocal);
                //FILEPATH = filePathLocal;
                //FILEPATH = fileEntry.fullPath;
                //FILEPATH = fileEntry.toURI();
                playAudio();
            }


        }, function(fileFail) {

            alert("File Not found");

            var ft = new FileTransfer();

            ft.onprogress = function(progressEvent) {

                if (progressEvent.lengthComputable) {
                    var perc = Math.floor(progressEvent.loaded
                            / progressEvent.total * 100);
                    $('#downloadStatus').html(perc + "% loaded...");
                } else {

                    if ($('#downloadStatus').html() == "") {
                        $('#downloadStatus').html("Loading");
                    } else {
                        $('#downloadStatus').html(
                                $('#downloadStatus').html() + ".");
                    }
                }
            }; //ft.Progress

            var filePathLocal = fileSystem.root.toURL() + "auidofiles/" +  mp3_file;    
            ft.download(audioStreamUrl, filePathLocal, function(entry) {    

                //alert("File = " + entry.toURI()); 
                if (device.platform == "Android") {
                    FILEPATH = entry.fullPath;
                    //FILEPATH = entry.toURI();
                    playAudio();
                } else {
                    var filePathLocal1 = getPhoneGapPath() + "auidofiles/" +  mp3_file; 
                    //alert("Ios File Path:" + filePathLocal);
                    FILEPATH = filePathLocal;
                    //FILEPATH = entry.fullPath;
                    //FILEPATH = entry.toURI();
                    playAudio();
                }

            }, function(error) {

                $('#downloadStatus').html(
                        "download error source " + error.source);
                $('#downloadStatus').html(
                        "download error target " + error.target);
                $('#downloadStatus').html("upload error code" + error.code);

            }); //ft.Download           
        }); //getFile End

    }, function(dirfail) {
        alert("dirfail");   
        alert(JSON.stringify(dirfail))
        $('#downloadStatus').html(JSON.stringify(dirfail));
    })

function getPhoneGapPath() {

var path = window.location.pathname;
path = path.substr( 0, path.length - 10 );
return 'file://' + path;

};

2 个答案:

答案 0 :(得分:0)

有一个新要求使用.toURL()而不是.fullPath

这解决了大多数这类问题 - 但是我遇到了类似的问题,使用旧版本的iOS(5.x),其中filetransfer.download永远不会触发成功/失败/进度事件,即使它确实下载了文件。当我尝试重新启动应用程序时,我的应用程序崩溃...

答案 1 :(得分:-1)

我遇到了同样的问题并使用将Cordova Plugin FileTransfer从v0.4.2降级到v0.3.3,同时使用Phonegap / Cordova v3.3 来修复它。