2013-03-26 21 views
13

Jak pobrać obraz z sieci i zapisać go w systemie plików przy użyciu Clojure? Znam adres URL obrazu i zdaję sobie sprawę, że nie mogę użyć do tego celu spit ani slurp, ponieważ są to dane binarne, a nie tekst.W Clojure, w jaki sposób pobrać obraz z sieci i zapisać go w systemie plików?

Chciałbym zrobić to tak prosto, jak to tylko możliwe, najlepiej jak działa spit i slurp. Oznacza to, że bez dodatkowych linii przy użyciu buforów lub tablic bajtowych. Chcę zamknąć strumienie, kiedy skończę, ale nie obchodzi mnie, czy jest to nieefektywne.

+0

Duplikat to pytanie [] (http://stackoverflow.com/questions/11321264/saving-an-image-form-clj-http- żądanie do pliku). Odpowiedzi udzielone przez IRC. – arrdem

+3

Zostawię to tutaj, aby google mogło znaleźć to lepiej. Najpierw zrobiłem wyszukiwarkę Google i nie mogłem znaleźć odpowiedzi. –

+2

Chociaż w praktyce rozwiązania tych dwóch pytań są prawie identyczne, to pytanie jest bardziej ogólne, ponieważ nie obejmuje "clj-http", aby uzyskać plik. Dlatego nie uważam, że powinna być zamknięta jako duplikat. –

Odpowiedz

19

Zhitong On pointed abym this solution, który pracował najlepszy dla moich celów:

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

Jak zauważa Zhitong, musisz (:require [clojure.java.io :as io]) w swoim nazw używać tego jako kodowane. Alternatywnie, można odwołać się do clojure.java.io bezpośrednio:

(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))) 
Powiązane problemy