Я пишу хром-приложение с scala.js и имею некоторые проблемы с чтением файлов.TypeError: Не удалось выполнить 'readAsText' в 'FileReader': параметр 1 не относится к типу 'Blob'
Когда я использую 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]'! – Freewind