TypeError:无法在“FileReader”上执行“readAsText”:参数 1 不是“Blob”类型

问题描述 投票:0回答:1

我正在使用 scala.js 编写一个 chrome 应用程序,并且遇到一些文件读取问题。

当我使用

chrome.fileSystem.chooseEntry
openDirectory
选择目录时,我想读取里面的
_meta_.json
文件,代码是:

chrome.fileSystem.chooseEntry(js.Dynamic.literal("type" -> "openDirectory"), (dir: Entry) => {
    dir.getFile("_meta_.json", js.Dynamic.literal(), (entry: FileEntry) => {
        entry.file((file: FileEntry) => {
          val reader = new FileReader()
          reader.onload = (event: UIEvent) => {
            println("############ read file: " + event)
          }
          reader.onloadend = (event: ProgressEvent) => {
            println("############ read file: " + reader.result)
            ()
          }
          reader.onerror = (event: Event) => {
            println("######### read error")
            ()
          }

          println("###### going to read")
          reader.readAsText(entry.asInstanceOf[Blob]) // !!!!
          ()
        })
    })
})

(这里的代码是简化的,如果想看准确的代码,请参考https://github.com/freewind/fast-links/blob/master/src/main/scala/in/freewind/fastlinks /chrome_app/config/Header.scala#L45)

但是当代码运行时,它不会打印任何内容,似乎该文件从未被读取。然后我设置了一个调试器并进入以

// !!!!
结尾的行,并在控制台中运行代码:

reader.readAsText(this.entry$1$2)

报告错误:

TypeError: Failed to execute 'readAsText' on 'FileReader': parameter 1 is not of type 'Blob'.

它清楚地显示了原因,但我不知道如何解决它。我搜索过,但所有类似的示例都使用 html DOM 中的文件输入文件。

如何正确读取文件?

google-chrome google-chrome-app filereader scala.js
1个回答
0
投票

我遇到了类似的事情并找到了这个答案: HTML5 FileReader 的问题

TLDR: 您传递给文件读取器的参数是文件名(字符串),而不是文件对象本身。

尝试这样的事情:

loadFile: function(e) {
    if(e != undefined) {
      var file = e.target.files[0];
        if(file != null && file.size > 0) {
          reader.readAsText(this.entry$1$2);
          //process file
        } else {
          //error
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.