كيفية تتبع تقدم التحميل في Go HTTP POST Requests
في تطوير نسخة ShareX لنظام التشغيل Linux باستخدام Go، هناك حاجة إلى مراقبة تقدم عمليات تحميل الملفات الكبيرة المرسلة عبر طلبات HTTP POST. على الرغم من أن فتح اتصال TCP يدويًا وكتابة طلبات HTTP في مجموعات يعد خيارًا، إلا أنه ليس الحل الأكثر كفاءة وموثوقية. يتضمن الأسلوب الأكثر فعالية إنشاء io.Reader مخصص للالتفاف حول القارئ الفعلي. يحتوي هذا القارئ المخصص، المسمى ProgressReader، على وظيفة Reporter التي تقوم بإخراج تقدم التحميل في كل مرة يتم فيها استدعاء أسلوب القراءة، مما يوفر مراقبة في الوقت الفعلي.
إليك مثال على كيفية تنفيذ هذه الفكرة:اكتب بنية ProgressReader { io.Reader وظيفة المراسل (ص int64) } func (pr *ProgressReader) قراءة (p [] بايت) (n int، خطأ خطأ) { ن، يخطئ = pr.Reader.Read (ع) مراسل (int64 (ن)) يعود
يتم بعد ذلك استخدام هذا القارئ المخصص لتغليف الملف الذي يتم تحميله:
file, _ := os.Open("/tmp/blah.go") الإجمالي := int64(0) العلاقات العامة := &ProgressReader{file, func(r int64) { المجموع = ص إذا ص > 0 { fmt.Println("التقدم"، ص) } آخر { fmt.Println("تم"، ص) } }}
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
}
io.Copy(ioutil.Discard, pr)
توفر هذه الطريقة طريقة بسيطة وموثوقة لتتبع تقدم التحميل لطلبات HTTP POST في Go، مما يتيح للمستخدمين مراقبة تقدم عمليات تحميل الملفات الكبيرة في الوقت الفعلي.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3