another way to solve this, from
http://users.utu.fi/machra/posts/2011-08-24-2-reddit-clojure.html
(ns myapp.app
(:require [clojure.java.io :as io]))
(defn copy [uri file]
(with-open [in (io/input-stream uri)
out (io/output-stream file)]
(io/copy in out)))
On Tue, Oct 16, 2012 at 6:32 PM, Yakovlev Roman <[email protected]> wrote:
> Ok that were good examples thanks
> Final variant
>
> add to project.clj
>
> [clj-http "0.5.6"]
>
> add ref to lib in ns
>
> (ns myapp.app
> (:require [clj-http.client :as client] ))
>
> function
>
> (defn write-file [url]
> (with-open [w (clojure.java.io/output-stream "img.jpg" )] ; output file
> (.write w (:body (client/get url {:as :byte-array})))) ; here we get
> image as byte-array
> ))
>
> Which trlanslates to ( i hope i get it right ) :
> Open file in stream mode (w) and write to it byte stream (image file ) from
> url.
>
>
> On Monday, October 15, 2012 1:06:19 PM UTC+4, Yakovlev Roman wrote:
>>
>> Hi
>> I am pretty new to java world so as i found there is no simple way to get
>> image file from url like : http://example.com/image.jpg.
>> What i need just to get file from url and store it to db.
>> So we need to use buffer, stream and stuff to get file. I found this code
>> but i guess there is a way to get things simplier.
>>
>> (defn fetch-data [url]
>> (let [con (-> url java.net.URL. .openConnection)
>> fields (reduce (fn [h v]
>> (assoc h (.getKey v) (into [] (.getValue v))))
>> {} (.getHeaderFields con))
>> size (first (fields "Content-Length"))
>> in (java.io.BufferedInputStream. (.getInputStream con))
>> out (java.io.BufferedOutputStream.
>> (java.io.FileOutputStream. "out.file")) ; Here is our
>> file
>> buffer (make-array Byte/TYPE 1024)]
>>
>> ; Not sure about that loop it's just prints size to repl if we don't need
>> that we can omit that part i guess
>>
>> (loop [g (.read in buffer)
>> r 0]
>> (if-not (= g -1)
>> (do
>> (println r "/" size)
>> (.write out buffer 0 g)
>> (recur (.read in buffer) (+ r g)))))
>>
>> (.close in)
>> (.close out)
>> (.disconnect con)))
>>
>> (fetch-data "http://google.com")
>>
>>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to [email protected]
> Note that posts from new members are moderated - please be patient with your
> first post.
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
--
Zhitong He
Sun Yat-sen University
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en