PhoneGap FileReader / readAsDataURL不触发回调

时间:2014-09-09 17:25:25

标签: javascript ios cordova filereader

我使用PhoneGap Build构建iOS v7.1 +应用程序并使用weinre进行调试。我正在使用媒体捕获插件和文件API捕获视频,尝试获取其base64表示。我可以打开录像机,拍摄视频,然后返回文件路径。然后我使用resolveLocalFileSystemURL()来获取readAsDataURL()所需的文件对象。问题是FileReader永远不会调用onloadend回调。

我整天都在闲逛。把console.log()放在我能想到的任何地方。我检查确保iOS版is supported。每个变量都是我所期望的,但回调根本就没有被调用。我也尝试设置所有其他回调,但也没有一个被调用。我尝试用readAsDataURL()替换readAsText(),但我仍然得到了bupkis。我已经尝试等待长达五分钟,因为我认为异步调用可能需要一点但仍然没有。

以下是我的代码。下面是控制台输出。

var elements = new Object();
elements["video"] = $("#window_incident_create > .video > source")[0];

navigator.device.capture.captureVideo(
    function(files) {
        for ( var i in files ) {
            var file = files[i];

            var name = file.name;
            var path = file.fullPath;
            if ( path.indexOf("/private") === 0 )
                path = "file://" + path.substr(8);
            else
                path = "file://" + path;
            var type = file.type;
            var lastModifiedDate = file.lastModifiedDate;
            var size = file.size;

            var reader = new FileReader();
            reader.onloadend = function(event) {
                console.log(3);
                elements["video"].type = type;
                elements["video"].src = "data:" + type + ";base64," + event.target.result;
                console.log(4);
            };

            window.resolveLocalFileSystemURL(
                path,
                function(entry) {
                    console.log(1, entry.nativeURL);
                    reader.readAsDataURL(entry);
                    console.log(2);
                },
                function(error) {
                    console.log("0-0", error);
                }
            );
        }
    },
    function(error) {
        console.log("0-1", error);
    },
    {
        limit:  1
    }
);
  

1“file:///var/mobile/Applications/AB239984-FB9F-43C0-B699-3596AC8A43A8/tmp/capture/capturedvideo.MOV”

     

2

1 个答案:

答案 0 :(得分:1)

重新整理您的代码。将reader初始化和onloadend回调置于resolveLocalFileSystemURL成功回调中。

这样的事情:

var elements = new Object();
elements["video"] = $("#window_incident_create > .video > source")[0];

navigator.device.capture.captureVideo(
    function(files) {
        for ( var i in files ) {
            var file = files[i];

            var name = file.name;
            var path = file.fullPath;
            if ( path.indexOf("/private") === 0 )
                path = "file://" + path.substr(8);
            else
                path = "file://" + path;
            var type = file.type;
            var lastModifiedDate = file.lastModifiedDate;
            var size = file.size;

            window.resolveLocalFileSystemURL(
                path,
                function(entry) {
                    console.log(1, entry.nativeURL);
                    var reader = new FileReader();
                    reader.onloadend = function(event) {
                        console.log(3);
                        elements["video"].type = type;
                        elements["video"].src = "data:" + type + ";base64," + event.target.result;
                        console.log(4);
                    };
                    reader.readAsDataURL(entry);
                    console.log(2);
                },
                function(error) {
                    console.log("0-0", error);
                }
            );
        }
    },
    function(error) {
        console.log("0-1", error);
    },
    {
        limit:  1
    }
);