You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Jason Ginchereau (JIRA)" <ji...@apache.org> on 2015/10/29 19:02:28 UTC

[jira] [Commented] (CB-9810) Mismatch between results of resolveLocalFileSystemURL and FileReader, throws error.

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

Jason Ginchereau commented on CB-9810:
--------------------------------------

I checked the sample code and found a mistake in how it is using the API to read the file. As you point out, the FileReader.readAsText() expects a File object as its parameter. A FileEntry object is not itself a File (and is not intended to be), but it can give you one. You need to call the FileEntry.file() method to retrieve the File object, which can then be passed to readAsText(). When I modified the sample code accordingly, it worked.

> Mismatch between results of resolveLocalFileSystemURL and FileReader, throws error.
> -----------------------------------------------------------------------------------
>
>                 Key: CB-9810
>                 URL: https://issues.apache.org/jira/browse/CB-9810
>             Project: Apache Cordova
>          Issue Type: Bug
>          Components: Plugin File
>    Affects Versions: 3.0.0
>         Environment: Android SDK 22
> Tested on an LG Nexus, Android 5.0.1
>            Reporter: Leonel Gayard
>
> h2. The problem
> When reading a file with {{resolveLocalFileSystemURL}} followed by {{FileReader.readAsText}},  the latter fails, with the error message {{Uncaught TypeError: Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'.}}
> cordova-plugin-file provides these functions, which match the W3C APIs for File and File System: [resolveLocalFileSystemURL|http://www.w3.org/TR/2011/WD-file-system-api-20110419/#widl-LocalFileSystem-resolveLocalFileSystemURL] and [FileReader|http://www.w3.org/TR/FileAPI/#APIASynch].
> h2. Possible causes ?
> It seems the fileEntry object is created inside the Java code, as a JSONObject (method [Filesystem#makeEntryForURL|https://github.com/apache/cordova-plugin-file/blob/r3.0.0/src/android/Filesystem.java#L61]; therefore it does not implement the Javascript interfaces File or Blob.
> h2. Possible solution ?
> Looking at the source of [FileReader.js|https://github.com/apache/cordova-plugin-file/blob/r3.0.0/www/FileReader.js#L130], it seems the FileReader implemented by the plugin delegates to the FileReader of the web view (at least, that's what the name of the variable suggests, `realReader`.
> Also, the function in file FileReader.js [seems to rely on the attribute localURL|https://github.com/apache/cordova-plugin-file/blob/r3.0.0/www/FileReader.js#L88] of the file object, which is not part of the API.
> I made a quick hack on my local installation, to remove the call to the "real" FileReader, and use the one written in Java; this fixed the issue, and makes it possible to use FileReader.
> Tested on Android SDK 22, on an LG Nexus, Android 5.0.1.
> h2. Example
> The repo at https://github.com/leonelag/proto-file-plugin has an example of an application trying to use the plugin to read and write files, and fails on Android.



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

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