如何在Cordova for iOS中从本机URI(资产库)访问图像 [英] How to access image from native URI (assets-library) in Cordova for iOS

查看:226
本文介绍了如何在Cordova for iOS中从本机URI(资产库)访问图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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



但是;在iOS上的文件名不会回来这样。我的iOS返回值显示路径为


assets-library://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/ ),它看起来像我需要以使用其文件系统布局的路径之一。它在Android上使用cordova.file.dataDirectory可以正常工作,但无法弄清如何在iOS上访问



我也试过使用窗口.resolveLocalFileSystemURL(path)但未定义为我的结果。



更新 b

我觉得我越来越近...使用 window.resolveLocalFileSystemURL(path,resolveOnSuccess,resOnError); p>

  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

看起来我现在需要使用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访问资产库中的文件

解决方案

我一直在努力处理类似的问题一会儿,但我今天想出来了。我还认为FileSystem API不能使用 assets-libary:// URIs - 但是不是这样。



您应该能够访问 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);
});
});


I have a Cordova/PhoneGap app which uses the camera to capture a picture. I need to access this picture to send to my server.

For Android I simply use $cordovaFile.readAsDataURL(cordova.file.dataDirectory, fileName)

However; on iOS the filename does not come back as such. My return value for iOS shows the path as

assets-library://asset/asset.JPG?id=539425FE-43AA-48E7-9865-D76348208AC7&ext=JPG

How can I access and read this image? I'd prefer to stick with $cordovaFile but just want to get it to work.

I am using CordovaCameraPreview plugin and the best I can get back from the picture taker handler seems to be something formed similar to:

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

How can I convert this to a filename and path that I can read with $cordovaFile? According to their documentation (http://ngcordova.com/docs/plugins/file/) it looks like I need to use one of their paths for File System Layout. It works fine on Android using cordova.file.dataDirectory but can't figure out how to access on iOS

I've also tried using window.resolveLocalFileSystemURL(path) but am getting undefined as my result.

Update

I feel like I'm getting closer... using window.resolveLocalFileSystemURL(path,resolveOnSuccess, resOnError); I get more information

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"

It looks like I now need to use the fullPath but still can't figure out how to access with $cordovaFile

If I try to use $cordovaFile.readAsDataURL(cordova.file.dataDirectory, data.name) where data.name is asset.JPG?id=711B4C9D-97D6-455A-BC43-C73059A5C3E8&ext=JPG I get a file not found error

Update 2

I have tried using every single File System Layout available at http://ngcordova.com/docs/plugins/file/ and receive the same File Not Found error on each one. Still no clue how to access a file in assets-library using $cordovaFile

解决方案

I was struggling with a similar issue for a while, but I figured it out today. I also thought that the FileSystem APIs didn't work with assets-libary:// URIs -- but that is not the case.

You should be able to get access to the File object (as well as the actual image name) by using the following code:

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);
    });
});

这篇关于如何在Cordova for iOS中从本机URI(资产库)访问图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆