【问题标题】:Cordova File Plugin, none of the callbacks are firingCordova File Plugin,没有一个回调被触发
【发布时间】:2015-06-18 00:08:44
【问题描述】:

使用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 文件 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);
            });

我收到以下错误:

成功回调Id错误:File1336724899:TypeError:未定义是 不是函数(评估'e.getFile')

【问题讨论】:

  • 我猜您需要使用常规 URL,而不是资产库 URL。为了确认我可能会尝试在网站上使用图片来查看它是否会加载...
  • 谢谢@Mike,1)为什么我不会收到错误消息? 2)如果我将路径传送到 img 的 ng-src 或其他东西,它工作得非常好 3)我确实需要访问该图像以发送,关于如何发送的任何建议?
  • 我不知道是否缺少错误 - 也许它在解析 URL 时会卡住。无论如何,如果您使用的是 cordova photo 插件,您可以使用 FILE_URI 选项来获取“普通”文件 url。
  • 我正在使用cordova相机预览插件,因为我需要实时预览,然后它会捕获图像。奇怪的是访问路径本身是如此尴尬......
  • 相机插件本机将原始照片数据从资产库复制到用户目录以支持 FILE_URI 选项。你可能不得不做类似的事情......

标签: cordova cordova-plugins ngcordova


【解决方案1】:

我浏览了许多关于这种行为的 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 ('assets-library://asset/' 对于iOS) 来获取提供getFile 函数的DirectoryEntry 对象.

【讨论】:

    【解决方案2】:

    我最近在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2023-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      相关资源
      最近更新 更多