2013-03-26 16 views
13

如何使用Clojure從網上下載圖像並將其保存到文件系統?我知道圖片網址,我知道我不能使用spitslurp來做到這一點,因爲它是二進制數據,而不是文本。在Clojure中,你如何從網上下載圖像並保存到文件系統?

我希望儘可能簡單地做到這一點,理想情況下就像spit和slurp是如何工作的。也就是說,沒有大量使用緩衝區或字節數組的額外行。我想在完成後關閉流,但我不在乎效率低下。

+0

[這個問題(指重複http://stackoverflow.com/questions/11321264/saving-an-image-form-clj-http-請求到文件)。通過IRC回答。 – arrdem 2013-03-26 03:14:26

+3

我要在這裏留下這個,以便Google可以更好地找到它。我首先做了谷歌搜索,找不到答案。 – 2013-03-26 03:40:28

+2

儘管在實踐中這兩個問題的解決方案几乎完全相同,但這個問題更爲廣泛,因爲它不涉及'clj-http'來獲取文件。因此我認爲它不應該作爲一個重複來關閉。 – 2013-10-10 19:57:27

回答

19

智通他pointedthis solution,其工作最適合我的目的:

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

由於智通所指出的,你需要在你的命名空間(:require [clojure.java.io :as io])以此爲編碼。或者,你可以直接引用clojure.java.io:

(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))) 
相關問題