Прочитать в файле с клиентским приложением clojurescript / re-frame - PullRequest
1 голос
/ 30 октября 2019

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

Теперь я только начинаю оборачиваться вокруг Re-Frame и копирую сам и заставляю работать следующее:

Где-тов моих функциях просмотра я отправляю это всякий раз, когда новый файл выбирается через простой ввод 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 и обработчик событий, как бы я это сделал?

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

1 Ответ

0 голосов
/ 31 октября 2019

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

...