Чтение в файле с клиентским приложением clojurescript/re-frame

Я пишу клиентское приложение, которое должно читать файл, преобразовывать его содержимое и затем экспортировать результат. Для этого я решился на 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 и обработчик событий, чтобы сделать это вместо этого, как бы я это сделал?

Я искал какое-то время, но почти ничего не нашел. Единственное, что появилось там, где другие фреймворки и тому подобное, но я не хочу вводить новую зависимость для каждой новой проблемы.


person de-narm    schedule 30.10.2019    source источник


Ответы (1)


Я предполагаю, что вы хотите делать все в клиенте, используя API-интерфейсы HTML5 (например, без фактической загрузки на сервер).

Это руководство от 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 из события и повторно использовать ее позже.

person Denis Fuenzalida    schedule 31.10.2019