【问题标题】:File length is undefined文件长度未定义
【发布时间】:2017-12-14 09:10:32
【问题描述】:

使用 Tizen SDK 的 Filesystem API,我得到了一个在 console.log 上打印以下数据的 javascript File 对象:

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

问题是文件的长度未定义。这会导致我的 Filereader readyState 保持在 0 (EMPTY) 状态(或者问题可能出在其他地方)。

为什么我的代码返回未定义的长度参数?

我的代码:

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);
    }
});

阅读器的控制台价值:

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

精度:

使用文件 url 在画布中插入图像正在工作,并且文件存在于设备上

【问题讨论】:

    标签: javascript file filereader tizen


    【解决方案1】:

    根据the documentation,length 是代表目录的File 实例(它告诉您目录包含多少文件和目录)。对于实际代表文件的File,您可以使用fileSize。

    我在Tizen file system documentation 的任何地方都看不到FileReader。相反,examples reading and writing files 通过openStream 使用FileStream。

    【讨论】:

    • 实际上,Tizen 创建的 File 对象似乎不是 HTML5 中的标准 File 对象。我想使用 File 和 FileReader 尝试这种方法,因为 FileStream 方法在服务器端返回我损坏的文件,正如我在另一个问题中所解释的那样:stackoverflow.com/questions/47793606/… 另外,感谢您的回答,我将改变我在文件流上的方法。跨度>
    • @BananasSplitter: 是的,看起来这是他们自己的事情,大概是因为File API 不允许你做他们让你做的事情,而过去被称为"Filesystem API" 的东西有停止(除了被重命名为“文件 API:目录和系统”)。
    • 它必须是他们自己的东西,因为文件系统 API 是基于 JavaScript 的 Web 应用程序和您使用的任何 SAMSUNG 设备的 API 之间的接口。就我而言,它通常是显示的,所以当我调用 Filesystem API 时,我使用的是 JavaScript,而 Filesystem API 本身是用于访问显示功能的 C++ 代码的说唱歌手。
    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多