Saving an image form clj-http request to file
我正在尝试保存使用clj-http下载的文件
我有以下代码:
1 2 3 4 5 6 | (def test-file (cl/get"http://placehold.it/350x150")) (defn write-file [] (with-open [w (clojure.java.io/writer "test-file.gif" :append true)] (.write w (:body test-file)))) |
当我尝试使其成为字节数组时,出现异常:
1 2 3 4 5 | user=> (def test-file (cl/get"http://placehold.it/350x150" {:as :byte-array})) #'user/test-file user=> (write-file) IllegalArgumentException No matching method found: write for class java.io.BufferedWriter clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79) |
救命!
使用二进制输出。
1 2 3 4 5 6 | (def test-file (client/get"http://placehold.it/350x150" {:as :byte-array})) (defn write-file [] (with-open [w (java.io.BufferedOutputStream. (java.io.FileOutputStream."test-file.gif"))] (.write w (:body test-file)))) |
编辑:
输出流更好:
1 2 3 | (defn write-file [] (with-open [w (clojure.java.io/output-stream"test-file.gif")] (.write w (:body test-file)))) |
更新:
优雅的方式:
1 2 3 | (clojure.java.io/copy (:body (client/get"http://placehold.it/350x150" {:as :stream})) (java.io.File."test-file.gif")) |