Search code examples
javascriptfilefilereadertizen

File length is undefined


Using the Filesystem API of Tizen SDK, I'm getting a javascript File object that prints the following datas on console.log:

File
created: Thu Dec 14 2017 09:59:51 GMT+0100 (CET)
fullPath: "/opt/share/folder/image.jpg"
get fileSize: function fileSizeGetter() {var _realPath=commonFS_.toRealPath(this.fullPath);var _result=native_.callSync('File_statSync',{location:_realPath});var _aStatObj=native_.getResultObject(_result);return _aStatObj.isFile?_aStatObj.size:undefined;}
isDirectory: false
isFile: true
length: undefined
mode: "rw"
modified: Thu Dec 14 2017 09:59:51 GMT+0100 (CET)
name: "image.jpg"
parent: File
path: "/opt/share/folder/"
readOnly: false
set fileSize: function () {}
__proto__: File

Problem is that the length of the File is undefined. This cause my Filereader readyState to stay at 0 (EMPTY) state (or maybe the problem is somewhere else).

Why is my code returning undefined for length parameter?

My code:

tizen.filesystem.resolve('/opt/share/folder/image.jpg', function(file) {
    console.log(file);

    var reader = new FileReader();
    console.log(reader);
    reader.readAsArrayBuffer(file);
    reader.onload = fileLoad;
    reader.onerror = function(evt){
        console.log(evt.target.error.name);
    }
});

Console value for reader:

FileReader
constructor: FileReaderConstructor
error: null
onabort: null
onerror: function (evt) {
onload: function fileLoad(evt) {
onloadend: null
onloadstart: null
onprogress: null
readyState: 0
result: null
__proto__: FileReaderPrototype

Precision:

Using the file url to insert image in a canvas is working and the file is existing on device


Solution

  • According to the documentation, length is for File instances representing directories (it tells you how many files and directories the directory contains). For a File actually representing a file, you'd use fileSize.

    I don't see a FileReader anywhere in the Tizen file system documentation. Instead, examples reading and writing files use a FileStream via openStream.