[ 
https://issues.apache.org/jira/browse/CB-9891?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15001021#comment-15001021
 ] 

Jason Ginchereau commented on CB-9891:
--------------------------------------

[~cjpearson] I don't think that calling uri.getEncodedPath() in 
LocalFileSystemURL.parse() is the right approach, because in cases of a normal 
file then we do actually want the decoded path.

In the PR I'm using a slightly different approach, which is to preserve the 
original encoding of the native URI (when there is one) in FileSystem.js.

> Inconsistent URI encoding causing permission errors on android
> --------------------------------------------------------------
>
>                 Key: CB-9891
>                 URL: https://issues.apache.org/jira/browse/CB-9891
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Plugin Camera, Plugin File
>    Affects Versions: 2.1.0, 3.0.0
>         Environment: Android 5+
>            Reporter: Connor Pearson
>            Assignee: Jason Ginchereau
>              Labels: Android, reproduced
>
> Using the camera plugin to get a picture from the photo library returns an 
> encoded URI. If you then call resolveLocalFileSystemURI the fileEntry object 
> returned contains the decoded path component of the URI. This path property 
> is used in the toInternalURL function which means it's also decoded. Because 
> Android gave us permission to the encoded URI, but not the decoded URI, 
> attempting to access the decoded URI results in a permission error. 
> {code:javascript}
> document.getElementById("myButton").addEventListener("click", function(){
>             navigator.camera.getPicture(function(uri){
>                 console.log(uri); 
> //content://com.android.providers.media.documents/document/image%3A27         
>               window.resolveLocalFileSystemURI(uri, function(fileEntry){
>                     console.log(fileEntry.toInternalURL()); 
> //cdvfile://localhost/content/com.android.providers.media.documents/document/image:27
>                                                                               
>                     fileEntry.file(function(){alert("success");}, 
> function(){alert("fail");});
>                 },function(error){
>                     // resolved by pulling in PR 119
>                     alert("Fail resolveFileSystemURI code: " + error.code);
>                 });
>             }, null, {sourceType: 0, allowEdit: false});
>         });
> {code}
> I feel like something must be wrong in one of the plugins, but I'm not sure 
> where.
> One possible fix is calling uri.getEncodedPath() instead of uri.getPath in 
> LocalFileSystemURL.parse and then removing the call to encodeURI() from 
> FileSystem.js, but I'm not sure if this is the right strategy. 
> [Example|https://github.com/cjpearson/cordova-plugin-file/commit/b1b9a5f9f5940223c443be5418f86dbea75106f5]



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to