How do you download an image from the web and save it to your file system using Clojure? I know the image url and I'm aware that I can't use spit
and slurp
to do this because it's binary data, not text.
I'd like to do this as simply as possible, ideally like how spit and slurp work. That is, without a lot of extra lines using buffers or byte arrays. I want to close the streams when I'm done, but I don't care if it's inefficient.
Zhitong He pointed me to this solution, which worked best for my purposes:
(defn copy [uri file]
(with-open [in (io/input-stream uri)
out (io/output-stream file)]
(io/copy in out)))
As Zhitong notes, you'll need (:require [clojure.java.io :as io])
in your namespace to use this as coded. Alternatively, you could refer to clojure.java.io directly:
(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)))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With