1

我正在编写一个客户端应用程序,它应该读取文件,转换其内容,然后导出结果。为此,我决定使用 Re-Frame。

现在,我刚刚开始围绕 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,而 fakepath 实际上是其中的一部分。

我的事件处理程序当前仅拆分名称并保存我上面的输入订阅的文件名以显示所选文件。

(re-frame/reg-event-db                       
  ::file-name-change                       
   (fn [db [_ new-name]]                          
     (assoc db :file-name (last (split new-name #"\\"))))) 

此外,我想读入文件以便稍后在本地处理它。假设我只是更改我的on-change操作和事件处理程序来执行此操作,我该怎么做?

我已经搜索了一段时间,但几乎一无所获。唯一出现在其他框架等的地方,但我不想为每个新问题引入新的依赖关系。

4

1 回答 1

1

我假设您想使用 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/文件

在您的情况下,您需要FileList从某处的事件中保存对对象的引用,并在以后重新使用它。

于 2019-10-31T02:32:45.503 回答