2013-06-25 6 views
5

मैं नीचे कुछ ऐसा कर सकता हूं, जो मुझे प्रतिक्रिया कक्षा देता है, लेकिन मुझे बिल्कुल यकीन नहीं है कि फ़ाइल में io.reader को कैसे लिखना है। सबसे सरल तरीका क्या है? ,फ़ाइल डाउनलोड करने का सबसे आसान तरीका?

resp, err := http.Get("your url") 
bytes, err := ioutil.ReadAll(resp.Body) 
err = ioutil.WriteFile(filename, bytes, 0666) 

यदि आपकी फ़ाइल इतना छोटा नहीं है तो आप बेहतर बनाने और bytes भरने से बचने चाहते हैं:

http.Get("https://www.domain.com/some.jpg") 

उत्तर

8

तो फ़ाइल छोटा है पर्याप्त सबसे आसान समाधान ioutil.WriteFileioutil.ReadAll के साथ संयुक्त उपयोग करने के लिए है सरणी। तो फिर तुम लेखक को पाठक से io.Copy जो केवल प्रतियां बाइट्स का उपयोग करना चाहिए:

resp, err := http.Get("your url") 
f, err := os.Create(filename) 
defer f.Close() 
_, err := io.Copy(f, resp.Body) 

आप दोनों ही मामलों में से निपटने प्रासंगिक त्रुटि को जोड़ना होगा।

+0

मैं वास्तव में 'ioutil.ReadAll' पर जोर देना चाहता हूं - यह लगभग कभी भी नहीं है जो आप एक अच्छी तरह से व्यवहार किए गए एप्लिकेशन में करना चाहते हैं। – Dustin

+0

@ डस्टिन अगर फ़ाइल पर्याप्त छोटा है, तो मुझे लगता है कि इससे कोई फर्क नहीं पड़ता। क्या आपको लगता है कि मुझे इस बिंदु पर अधिक जोर देना चाहिए? –

+0

मैं आपसे असहमत नहीं हूं, लेकिन शायद io.Copy संस्करण पहले होना चाहिए। मुझे लगता है कि आपका कोड और तर्क दोनों सही हैं (हालांकि मैं आपके कार्यक्रम में कुछ बुरा कर सकता हूं)। मुझे डर है कि मैं और अधिक लोगों को "स्मृति में सब कुछ खींचने" की बात करूँगा। – Dustin

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