2013-03-26 7 views
13

आप वेब से एक छवि कैसे डाउनलोड करते हैं और क्लोजर का उपयोग करके इसे अपने फ़ाइल सिस्टम में सहेजते हैं? मुझे छवि यूआरएल पता है और मुझे पता है कि मैं ऐसा करने के लिए spit और slurp का उपयोग नहीं कर सकता क्योंकि यह बाइनरी डेटा है, टेक्स्ट नहीं।क्लोजर में, आप वेब से एक छवि कैसे डाउनलोड करते हैं और इसे अपने फ़ाइल सिस्टम में सहेजते हैं?

मैं इसे जितना संभव हो सके करना चाहूंगा, आदर्श रूप से कैसे थूक और स्लिप काम करता हूं। यही है, बफर या बाइट सरणी का उपयोग करके बहुत सी अतिरिक्त लाइनों के बिना। जब मैं कर रहा हूं, तो मैं धाराओं को बंद करना चाहता हूं, लेकिन मुझे परवाह नहीं है कि यह अक्षम है या नहीं।

+0

[इस सवाल] (की डुप्लीकेट http://stackoverflow.com/questions/11321264/saving-an-image-form-clj-http- अनुरोध करने वाली फ़ाइल)। आईआरसी के माध्यम से उत्तर दिया। – arrdem

+3

मैं इसे यहां छोड़ने जा रहा हूं ताकि Google इसे बेहतर पा सके। मैंने पहले Google खोज की थी और मुझे कोई जवाब नहीं मिला। –

+2

हालांकि व्यवहार में इन दो सवालों के समाधान लगभग समान हैं, यह प्रश्न अधिक सामान्य है कि इसमें फ़ाइल प्राप्त करने के लिए 'clj-http' शामिल नहीं है। इसलिए मुझे नहीं लगता कि इसे डुप्लिकेट के रूप में बंद किया जाना चाहिए। –

उत्तर

19

Zhitong वह pointed मुझे this solution है, जो मेरी प्रयोजनों के लिए सबसे अच्छा काम किया:

(defn copy [uri file] 
    (with-open [in (io/input-stream uri) 
       out (io/output-stream file)] 
    (io/copy in out))) 

Zhitong नोटों के रूप में, आप के रूप में कोडित इस का उपयोग करने के लिए अपने नाम स्थान में (:require [clojure.java.io :as io]) की आवश्यकता होगी। वैकल्पिक रूप से, आप सीधे clojure.java.io की जानकारी दे सकती:

(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))) 
संबंधित मुद्दे

 संबंधित मुद्दे