使用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')
答案 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存储库中的完整问题