我正在编写一个客户端应用程序,该应用程序应读取文件,转换其内容,然后导出结果。为此,我决定重新框架。
现在,我刚刚开始将脑袋包裹在Re-Frame上,并完成了cloujurescipt的工作:
[在我的视图函数中的任何地方,只要通过简单的HTML输入选择了新文件,就发送此消息。
[:input {:class "file-input" :type "file"
:on-change #(re-frame/dispatch
[::events/file-name-change (-> % .-target .-value)])}]
[我得到的是类似C:\fakepath\file-name.txt
的东西,其中falsepath实际上是其中的一部分。
我的事件处理程序当前仅拆分名称,并保存我在上面输入的内容所订阅的文件名,以显示所选文件。
(re-frame/reg-event-db
::file-name-change
(fn [db [_ new-name]]
(assoc db :file-name (last (split new-name #"\\")))))
此外,我想读入文件以稍后在本地对其进行处理。假设我只是更改on-change
操作和事件处理程序以执行此操作,我将如何执行此操作?
我搜索了一段时间,但几乎找不到。唯一出现在其他框架之类的地方,但是我不想为每个新问题引入新的依赖关系。
我假设您想使用HTML5 API在客户端中完成所有操作(例如,没有实际上传到服务器)。>>
MDN的本指南可能会派上用场:https://developer.mozilla.org/en-US/docs/Web/API/File/Using_files_from_web_applications
[似乎您可以订阅用户选择文件时触发的事件,然后可以获得所述文件的列表,并通过File API检查文件内容:https://developer.mozilla.org/en-US/docs/Web/API/File
在您的情况下,您需要将事件中对FileList
对象的引用保存在某个地方,以后再使用。