«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как отслеживать ход загрузки в HTTP-запросах Go HTTP POST: практическое руководство с использованием ProgressReader?

Как отслеживать ход загрузки в HTTP-запросах Go HTTP POST: практическое руководство с использованием ProgressReader?

Опубликовано 4 ноября 2024 г.
Просматривать:912

How to Track Upload Progress in Go HTTP POST Requests: A Practical Guide Using ProgressReader?

Как отслеживать ход загрузки в Go HTTP POST-запросы

При разработке клона ShareX для Linux с использованием Go необходимо отслеживать ход загрузки больших файлов, отправленных через HTTP-запросы POST. Хотя открытие TCP-соединения вручную и запись HTTP-запросов частями является вариантом, это не самое эффективное и надежное решение.

ProgressReader: собственный io.Reader

Более эффективный подход предполагает создание специального io.Reader, который будет охватывать реальное устройство чтения. Это пользовательское средство чтения, называемое ProgressReader, имеет функцию Reporter, которая выводит информацию о ходе загрузки каждый раз при вызове метода Read, обеспечивая мониторинг в реальном времени.

Вот пример реализации этой идеи:

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-запросов в Go, позволяя пользователям отслеживать ход загрузки больших файлов в режиме реального времени.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3