Cordova File Plugin,没有一个回调被触发

时间:2015-06-18 00:08:45

标签: cordova cordova-plugins ngcordova

使用http://plugins.cordova.io/#/package/org.apache.cordova.file和插件安装= org.apache.cordova.file 1.3.3"文件"

我拍摄了一张照片,并尝试将其转换为base64。返回的图片位置(下面的var路径)是" assets-library://asset/asset.JPG?id = ECB406E6-E361-46AA-9282-FEEBDAC170DF& ext = JPG"

首先从文档中看起来我需要的只是:

   // Convert to image URL base64
   var fileReader = new FileReader();
   fileReader.onloadend = function (data) {
        console.log(data.target.result);
   };

   fileReader.readAsDataURL(path);

代码已执行,但回调从未触发过!然后我挖了一下并添加了一堆其他的fileReader选项......实际执行的确切为零。 iOS和Android上的行为相同

        fileReader.onload = function (data) {
            console.log("onload", data);
        };


        fileReader.onerror = function (data) {
            console.log("error!", data);
        };


        fileReader.onloadstart = function (data) {
            console.log("onloadstart", data);
        };

我没有收到任何JS错误,但我也没有得到任何控制台输出。

1)为什么Cordova文件FileReader()回调没有触发?

更新

我也试过使用ngCordova的文件插件,http://ngcordova.com/docs/plugins/file/

$cordovaFile.readAsDataURL('assets-library://asset/', 'asset.JPG?id=ECB406E6-E361-46AA-9282-FEEBDAC170DF&ext=JPG')
            .then(function (success) {
                // success
                console.log("ng success", success);
            }, function (error) {
                // error
                console.log("ng error", error);
            });

由此我收到以下错误:

  

成功时出错callbackId:File1336724899:TypeError:undefined is   不是一个功能(评估' e.getFile')

2 个答案:

答案 0 :(得分:1)

我已经浏览了很多有关此行为的SO帖子和论坛。 Error in Success callbackId:问题出现在我们正在构建的应用程序的iOS版本上,但不是Android。经过进一步调查(在ngCordova源代码本身中使用日志记录行为),我发现assets-library://asset/转换为Cordova中的NATIVE_URI,这是W3文件系统API规范中的FileEntry对象,设计自:FileEntry Interface

使用FILE_URI(在我的情况下,我使用的是cordova相机插件,并且很容易配置),我注意到我现在正在使用DirectoryEntry对象,并提供{{1我正在寻找的功能:DirectoryEntry Interface

TL; DR:尝试使用getFile(file://)代替FILE_URI('assets-library:// asset /'for iOS)来获取NATIVE_URI个对象提供DirectoryEntry功能。

答案 1 :(得分:0)

我最近遇到了与moveFile函数相同的问题,在我的情况下,我犯了一个错误。在函数moveFile中,我在我的服务的moveFrom参数中发送了带有文件名的目录。正确的方法只设置目录。

function moveFile(moveFrom, currentFileName, moveTo, newFileName) {
    return $cordovaFile.moveFile(moveFrom, currentFileName, cordova.file.dataDirectory + moveTo, newFileName);
}

Cordova文件插件可能会返回无效的目录错误。

请参阅ng-cordova存储库中的完整问题

https://github.com/driftyco/ng-cordova/issues/1160