2012-04-07 6 views
2

Gibt es Bibliotheken, die FTP-Übertragung mit Clojure, Idiomatic zu Clojure, oder ist es notwendig, eine Java-Bibliothek wie Apache Commons zu verwenden?FTP mit Clojure

Dank

Antwort

3

Es ist nicht notwendig Java-Bibliothek zu verwenden und Sie die vollständige FTP-Implementierung in Clojure rollen können, aber dass das Rad wie neu zu erfinden und nicht ein machbares, was zu tun wäre. Was Sie tun können, ist wahrscheinlich, einen funktionaleren Wrapper über die Java-Bibliothek zu schreiben und diesen Wrapper dann in Ihrem Clojure-Code zu verwenden, damit alles nahtlos aussieht und wie viele der vorhandenen Java-Bibliotheken in Clojure verwendet werden.

1

Sie können https://github.com/miner/clj-ftp verwenden, indem Sie entweder einige Komfortfunktionen aufrufen oder einen Client öffnen und mehrere Befehle damit aufrufen.

Die vollständige API ist in GitHub unter https://github.com/miner/clj-ftp/blob/master/src/miner/ftp.clj dokumentiert.

Inhalt von project.clj

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

einen einzelnen FTP-Befehl

Dies öffnet Verbindung neue FTP für jeden Befehl aufrufen, so dass es nur einen einzigen Befehl zum Aufrufen verwendet werden soll. Eine vollständige Liste dieser Komfortfunktionen finden Sie in der vollständigen 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))) 

mehrere Befehle mit derselben Verbindung

Dies wird FTP-Verbindung öffnen aufrufen und beliebige Menge von Befehlen mit ihm aufrufen. Dies sollte verwendet werden, wenn mehrere Befehle aufgerufen werden sollen. Die FTP-Verbindung wird automatisch geschlossen. Überprüfen Sie erneut die vollständige API für eine vollständige Liste der Funktionen.

(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))))))