2012-04-07 7 views
2

clojureでFTP転送を実行するライブラリがありますか?clojureに慣用であるか、apache commonsなどのJavaライブラリを使用する必要がありますか?FTP with Clojure

おかげ

答えて

3

Javaライブラリを使用する必要はありません、あなたはClojureの中で、完全なFTPの実装をロールバックすることができますが、それは再発明し、車輪とそうでないために実行可能なことのようになります。あなたができることは、おそらくJavaライブラリ上にもっと機能的なラッパーを書いて、そのラッパーをあなたのクロージャーコードで使って、すべてがシームレスであり、Clojureで既存のJavaライブラリのどれが使用されているのかわからないようにすることです。

1

https://github.com/miner/clj-ftpは、いくつかの便利な関数を呼び出すか、クライアントを開いて複数のコマンドを呼び出すことによって使用できます。

完全なAPIはGitHubのhttps://github.com/miner/clj-ftp/blob/master/src/miner/ftp.cljに記載されています。それは、単一のコマンドを呼び出すために使用されるべきであるように、単一のFTPコマンド

を起動

(defproject my-sweet-project "0.5.0" 
    :dependencies [[com.velisco/clj-ftp "0.3.0"] 
       ; Other deps 
       ] 
    ; ... 
) 

project.clj

内容は、これは、各コマンドの新しい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))))))