Есть ли библиотеки для выполнения FTP-передачи с clojure, идиоматическими для clojure или необходимо использовать библиотеку java, такую как apache commons?FTP с Clojure
Благодаря
Есть ли библиотеки для выполнения FTP-передачи с clojure, идиоматическими для clojure или необходимо использовать библиотеку java, такую как apache commons?FTP с Clojure
Благодаря
нет необходимости использовать библиотеку Java, и вы можете свернуть полную реализацию FTP в Clojure, но это было бы, как заново изобретать колесо и не является возможным, что нужно сделать. Что вы можете сделать, вероятно, написать более функциональную оболочку над библиотекой Java, а затем использовать эту оболочку в своем коде clojure, чтобы все казалось бесшовным и что многие из существующих библиотек Java используются в Clojure.
https://github.com/miner/clj-ftp является оберткой поверх сети Apache Commons Net.
Вы можете использовать https://github.com/miner/clj-ftp либо путем вызова нескольких удобных функций, либо путем открытия клиента и вызова нескольких команд с ним.
Полный API документирован в GitHub по адресу https://github.com/miner/clj-ftp/blob/master/src/miner/ftp.clj.
Содержание project.clj
(defproject my-sweet-project "0.5.0"
:dependencies [[com.velisco/clj-ftp "0.3.0"]
; Other deps
]
; ...
)
Вызов одной команды FTP
Это откроет новый FTP соединение для каждой команды, так что следует использовать для вызова только одной команды. Полный список этих удобных функций см. В полном API.
(ns my-sweet-name.space
(:require [miner.ftp :as ftp]))
(defn list-files-from-ftp-server []
"Here we list contents of a directory with a convenience function"
(let [ftp-url "ftp://username:[email protected]:port/path/to/stuff"]
(ftp/list-files ftp-url)))
Вызов нескольких команд с таким же соединением
Это откроет FTP-соединение и вызвать произвольное количество команд с ней. Это следует использовать при вызове нескольких команд. Соединение FTP будет автоматически закрыто. Снова проверьте полный API для полного списка функций.
(ns my-sweet-name.space
(:require [miner.ftp :as ftp]))
(defn list-and-download-files []
"Here we list and download contents of a directory"
(let [ftp-url "ftp://username:[email protected]:port/path/to/stuff"]
(ftp/with-ftp [ftp-client ftp-url]
; client-file-names is used to list contents of the ftp-url
; client-get is used to download a file
(doseq [file-name (ftp/client-file-names ftp-client)]
(let [local-file-name (str "/download-path/" file-name)]
(ftp/client-get ftp-client file-name local-file-name))))))