cordova-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jason Ginchereau (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CB-9810) Mismatch between results of resolveLocalFileSystemURL and FileReader, throws error.
Date Thu, 29 Oct 2015 18:02:28 GMT

    [ 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


Mime
View raw message