Принудительно закрыть http-соединение в Голанге - PullRequest
0 голосов
/ 01 июня 2018

Моя программа загружает файл с одного сервера и затем возвращает его пользователю.Вот фрагмент кода:

// Make get request to target server
resp, httpErr := http.Get(url.String()) 

// Return error if http request is failed 
if httpErr != nil {
    fmt.Fprintln(w,"Http Request Failed :" ,httpErr.Error())
    return
}

//Setting up headers
w.Header().Set("Content-Disposition", "attachment; filename="+vid.Title+"."+format.Extension)
w.Header().Set("Content-Type", r.Header.Get("Content-Type"))
w.Header().Set("Content-Length", strconv.Itoa(int(resp.ContentLength)))

// Copy instream of resp.Body to writer
io.Copy(w, resp.Body)

Когда пользователь останавливает загрузку или закрывает соединение, я хочу также закрыть соединение GET.Но это не закрывается, как я нашел через график использования.Как я могу закрыть соединение пользователя?

1 Ответ

0 голосов
/ 01 июня 2018

Вы должны закрыть тело запроса в любом случае:

resp, httpErr := http.Get(url.String())
if httpErr != nil {
   // handle error
   return
}
// if it's no error then defer the call for closing body
defer resp.Body.Close()

Больше не нужно делать.Когда клиент закрывает соединение, io.Copy возвращается с ошибкой.io.Copy возвращает количество записанных байтов и ошибку.Вы можете проверить это, если хотите знать, удалась ли копия.

written, err := io.Copy(w, resp.Body)
if err != nil {
    // Copy did not succeed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...