2012-04-07 48 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))))))