[ 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