Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Clojure, how do you download an image from the web and save it to your file system?

Tags:

clojure

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.

like image 573
Daniel Kaplan Avatar asked Mar 26 '13 03:03

Daniel Kaplan


1 Answers

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)))
like image 184
Dave Liepmann Avatar answered Oct 21 '22 21:10

Dave Liepmann