Skip to content

Instantly share code, notes, and snippets.

Created April 28, 2014 16:35
What would you like to do?
Fetch & write a binary file using Clojure and clj-http
(ns the-namespace.core
(:require [clj-http.client :as client]
[ :as io]))
(defn- fetch-photo!
"makes an HTTP request and fetches the binary object"
(let [req (client/get url {:as :byte-array :throw-exceptions false})]
(if (= (:status req) 200)
(:body req))))
(defn- save-photo!
"downloads and stores the photo on disk"
(let [p (fetch-photo! (:url photo))]
(if (not (nil? p))
(with-open [w (io/output-stream (str "photos/" (:id photo) ".jpg"))]
(.write w p)))))
Copy link

Thanks, just what I needed for downloading and writing images from the PrestaShop web service.

Copy link

hgalant commented Jun 23, 2017

Not too familiar with clj-http but assuming (:body req) yields a byte-array, as it seems, save-photo! can be easier and Java-interop-free with

(defn- save-photo!
  "downloads and stores the photo on disk"
  [{:keys [url id] :as photo}]
 (some-> (fetch-photo! url) (io/copy (io/file "photos" id ".jpg"))))

Did not test, but looks okay.

Copy link

Great, thanks!

Copy link

viebel commented Jul 22, 2022

Thank you. Very useful

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment