【发布时间】:2015-04-23 23:13:05
【问题描述】:
我正在用 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 的文件输入文件。
如何正确读取文件?
【问题讨论】:
-
刚刚找到原因,这是一个愚蠢的错误。应该是
reader.readAsText(file.asInstanceOf[Blob]),而不是entry.asInstanceOf[Blob]!
标签: google-chrome google-chrome-app filereader scala.js