2015-03-06 3 views
1

Я пытаюсь передать файл, который я получаю из API обратно пользователю без необходимости хранить его все в памяти.Piping http.Response to http.ResponseWriter

Я столкнулся с различными понятиями/идеями в моем поиске, такими как io.Copy, io.Pipe() и т. Д. Я не уверен, какой из них является правильным решением.

Например, io.Pipe() кажется, что это так, если кто-то создает нового читателя и писателя на месте, а не те, которые уже существуют.

ответ

5

io.Copy это путь для того, что-то вдоль линий:

func pipeReq(rw http.ResponseWriter, req *http.Request) { 
    resp, err := http.Get(".....") 
    if err != nil{ 
     //handle the error 
     return 
    } 
    rw.Header().Set("Content-Type", resp.Header.Get("Content-Type")) 
    rw.Header().Set("Content-Length", resp.Header.Get("Content-Length")) 
    io.Copy(rw, resp.Body) 
    resp.Body.Close() 

} 

// редактирования: неправильно вопрос, фиксированный код прямо сейчас.