2012-04-07 45 views
2

是否有执行使用Clojure FTP传输,惯用于Clojure的任何库,或者是需要使用Java库,如Apache的百科全书?FTP使用Clojure

感谢

回答

3

这是没有必要使用Java库,您可以用Clojure推出完整的FTP实现,但会像重新发明轮子,而不是一个可行的事情。你可以做的可能是写在Java库一个功能更强大的包装,然后使用该包装在您的Clojure代码,使一切都显得无缝that't有多少现有的Java库是Clojure中被使用。

1

您可以通过调用一些方便的功能或打开客户端,并用它调用多个命令使用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))))))