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

Reply via email to