2013-03-26 12 views
13

Wie lade ich ein Bild aus dem Internet herunter und speichere es mit Clojure in deinem Dateisystem? Ich kenne die Bild-URL und mir ist bewusst, dass ich spit und slurp nicht dafür verwenden kann, weil es binäre Daten sind, nicht Text.Wie können Sie in Clojure ein Bild aus dem Internet herunterladen und in Ihrem Dateisystem speichern?

Ich möchte das so einfach wie möglich tun, im Idealfall wie Spucke und Schluck arbeiten. Das heißt, ohne viele zusätzliche Zeilen mit Puffern oder Byte-Arrays. Ich möchte die Streams schließen, wenn ich fertig bin, aber es ist mir egal, ob es ineffizient ist.

+0

Duplizieren von [diese Frage] (http://stackoverflow.com/questions/11321264/saving-an-image-form-clj-http- Anfrage-zu-Datei). Beantwortet über IRC. – arrdem

+3

Ich werde das hier lassen, damit Google das besser finden kann. Ich habe zuerst eine Google-Suche durchgeführt und konnte keine Antwort finden. –

+2

Obwohl in der Praxis die Lösungen für diese beiden Fragen fast identisch sind, ist diese Frage allgemeiner, da es nicht "clj-http" beinhaltet, um die Datei zu erhalten. Daher glaube ich nicht, dass es als Duplikat geschlossen werden sollte. –

Antwort

19

Zhitong Er pointed mich this solution, die am besten für meine Zwecke gearbeitet:

(defn copy [uri file] 
    (with-open [in (io/input-stream uri) 
       out (io/output-stream file)] 
    (io/copy in out))) 

Wie Zhitong stellt fest, werden Sie (:require [clojure.java.io :as io]) in Ihrem Namensraum müssen diese als codierte zu verwenden. Alternativ können Sie auch direkt auf clojure.java.io verweisen:

(defn copy-uri-to-file [uri file] 
    (with-open [in (clojure.java.io/input-stream uri) 
       out (clojure.java.io/output-stream file)] 
    (clojure.java.io/copy in out))) 
Verwandte Themen