使用安装的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 回答
关于这种行为我经历过无数的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 InterfaceTL; DR:尝试使用
FILE_URI
(file://)而不是NATIVE_URI
(iOS的'assets-library://asset/')来获取提供getFile
函数的DirectoryEntry
对象 .我最近遇到了与moveFile函数相同的问题,在我的情况下,我犯了一个错误 . 在函数moveFile中,我在我的服务的moveFrom参数中发送了带有文件名的目录 . 正确的方法只设置目录 .
Cordova文件插件可能会返回无效的目录错误 .
请参阅ng-cordova存储库中的完整问题
https://github.com/driftyco/ng-cordova/issues/1160