首页 文章

Cordova File Plugin,没有一个回调被解雇

提问于
浏览
0

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

我拍摄了一张照片,并尝试将其转换为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 File FileReader()回调没有触发?

Update

我也试过使用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不是函数(评估'e.getFile')

2 回答

  • 0

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

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

    TL; DR:尝试使用 FILE_URI (file://)而不是 NATIVE_URI (iOS的'assets-library://asset/')来获取提供 getFile 函数的 DirectoryEntry 对象 .

  • 1

    我最近遇到了与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

相关问题