गो HTTP पोस्ट अनुरोधों में अपलोड प्रगति को कैसे ट्रैक करें
गो का उपयोग करके लिनक्स के लिए शेयरएक्स क्लोन के विकास में, इसकी आवश्यकता है HTTP POST अनुरोधों के माध्यम से भेजे गए बड़े फ़ाइल अपलोड की प्रगति की निगरानी करें। जबकि टीसीपी कनेक्शन को मैन्युअल रूप से खोलना और HTTP अनुरोधों को टुकड़ों में लिखना एक विकल्प है, यह सबसे कुशल और विश्वसनीय समाधान नहीं है।
प्रोग्रेसरीडर: एक कस्टम io.रीडर
एक अधिक प्रभावी दृष्टिकोण में वास्तविक पाठक को लपेटने के लिए एक कस्टम io.Reader बनाना शामिल है। इस कस्टम रीडर, जिसे प्रोग्रेसरीडर कहा जाता है, में एक रिपोर्टर फ़ंक्शन है जो हर बार रीड विधि को कॉल करने पर अपलोड प्रगति को आउटपुट करता है, जो वास्तविक समय की निगरानी प्रदान करता है।
इस विचार को कैसे लागू किया जाए इसका एक उदाहरण यहां दिया गया है:
type ProgressReader struct {
io.Reader
Reporter func(r int64)
}
func (pr *ProgressReader) Read(p []byte) (n int, err error) {
n, err = pr.Reader.Read(p)
pr.Reporter(int64(n))
return
}
इस कस्टम रीडर का उपयोग अपलोड की जा रही फ़ाइल को रैप करने के लिए किया जाता है:
file, _ := os.Open("/tmp/blah.go")
total := int64(0)
pr := &ProgressReader{file, func(r int64) {
total = r
if r > 0 {
fmt.Println("progress", r)
} else {
fmt.Println("done", r)
}
}}
अंत में, डेटा को io.Copy का उपयोग करके ioutil.Discard में कॉपी किया जाता है, जो प्रगति आउटपुट को प्रिंट करने की अनुमति देते हुए डेटा के लिए सिंक के रूप में कार्य करता है।
io.Copy(ioutil.Discard, pr)
यह विधि गो में HTTP POST अनुरोधों के लिए अपलोड प्रगति को ट्रैक करने का एक सरल और विश्वसनीय तरीका प्रदान करती है, जिससे उपयोगकर्ता वास्तविक समय में बड़ी फ़ाइल अपलोड की प्रगति की निगरानी कर सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3