如何从Cordova for iOS中的本机URI(资产库)访问图像

Jos*_*ana 15 ios cordova

我有一个Cordova/PhoneGap应用程序,它使用相机拍摄照片.我需要访问此图片才能发送到我的服务器.

对于Android我只是使用 $cordovaFile.readAsDataURL(cordova.file.dataDirectory, fileName)

然而; 在iOS上,文件名不会回来.我的iOS返回值显示路径为

资产库://asset/asset.JPG ID = 539425FE-43AA-48E7-9865-D76348208AC7及EXT = JPG

如何访问和阅读此图像?我更喜欢坚持使用$ cordovaFile,但只是想让它发挥作用.

我正在使用CordovaCameraPreview插件,我可以从图片处理程序处理程序回来的最好的东西似乎形成类似于:

assets-library://asset/asset.JPG?id = 990355E1-200A-4E35-AAA1-7D461E3999C8&ext = JPG assets-library://asset/asset.JPG?id = C49FF0EB-CCCB-45B2-8577-B13868D8DB29&ext = JPG

如何将其转换为我可以使用$ cordovaFile读取的文件名和路径?根据他们的文档(http://ngcordova.com/docs/plugins/file/),看起来我需要使用他们的一个路径进行文件系统布局.它在使用cordova.file.dataDirectory的Android上工作正常,但无法弄清楚如何在iOS上访问

我也尝试过使用window.resolveLocalFileSystemURL(path)但是我的结果是未定义的.

更新

我觉得我越来越近......使用window.resolveLocalFileSystemURL(path,resolveOnSuccess, resOnError);我获得更多信息

name: "assets-library"
fullPath: "/asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
name: "asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
nativeURL: "assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG"
Run Code Online (Sandbox Code Playgroud)

看起来我现在需要使用fullPath但仍无法弄清楚如何使用$ cordovaFile访问

如果我尝试使用$cordovaFile.readAsDataURL(cordova.file.dataDirectory, data.name)data.name是asset.JPG?id = 711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext = JPG我得到一个文件未找到错误

更新2

我尝试使用http://ngcordova.com/docs/plugins/file/上提供的每个文件系统布局,并在每个文件系统布局上收到相同的文件未找到错误.仍然不知道如何使用$ cordovaFile访问资产库中的文件

mic*_*ico 9

我有一个简单的替代成功,就像这样

fullPath = fullPath.replace("assets-library://", "cdvfile://localhost/assets-library/")
Run Code Online (Sandbox Code Playgroud)

它适用于iOS 9.3


dan*_*vis 8

一段时间我一直在努力解决类似问题,但今天我想出来了.我还认为FileSystem API不能与assets-libary://URI一起使用 - 但事实并非如此.

您应该能够使用以下代码访问File对象(以及实际的图像名称):

resolveLocalFileSystemURL('assets-library://asset/asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG', function(fileEntry) {
    fileEntry.file(function(file) {
        var reader = new FileReader();
        reader.onloadend = function(event) {
            console.log(event.target.result.byteLength);
        };
        console.log('Reading file: ' + file.name);
        reader.readAsArrayBuffer(file);
    });
});
Run Code Online (Sandbox Code Playgroud)