#rest #go
#rest #Вперед
Вопрос:
Я создаю приложение REST с вариантом использования, в котором клиент отправляет запрос GET с некоторыми параметрами, а на стороне сервера API обрабатывает его и создает tar-файл. В конце он должен отправить этот tar-файл клиенту, например, для автоматической загрузки на основе запроса. Любая помощь здесь? Я застрял после создания файла tar, не уверен, как я могу отправить этот файл клиенту (например, автоматическая загрузка)
Пример кода для эмуляции моего вопроса
func main() {
http.HandleFunc("/", someHandle)
port := ":8080"
err := http.ListenAndServe(port, nil)
if err != nil {
log.Println(err)
}
}
func someHandle(res http.ResponseWriter, req *http.Request){
...
...
some code
...
file, err := createFile(filePath)
...
//Now I have to send this file as response, any thoughts?
}
Комментарии:
1. Если
file
вio.Writer
, тоio.Copy(res, file)
. Что это за типfile
?
Ответ №1:
Я полагаю, http.ServeFile — это то, что вы ищете.
Вот рабочий пример:
package main
import (
"log"
"net/http"
)
type Server struct {
listenPort string
}
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
router := http.NewServeMux()
router.HandleFunc("/download", s.downloadHandler)
router.ServeHTTP(w, r)
}
func (s *Server) downloadHandler(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w,r, "file.tar.xz")
}
func main(){
s := amp;Server{listenPort: ":8080"}
if err := http.ListenAndServe(s.listenPort, s); err != nil {
log.Fatalf("could not listen on port %s: %v", s.listenPort, err)
}
}