- 编写upload上传文件函数:
func uploadFile(ctx http.Context) error {
req := ctx.Request()
fileName := req.FormValue("name")
file, handler, err := req.FormFile("file")
if err != nil {
return err
}
defer file.Close()
f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0o666)
if err != nil {
return err
}
defer f.Close()
_, _ = io.Copy(f, file)
return ctx.String(200, "File "+fileName+" Uploaded successfully")
}
- 在server层的http.go添加mux的上传文件函数:
func NewHTTPServer(c *conf.Server, greeter *service.GreeterService, logger log.Logger) *http.Server {
var opts = []http.ServerOption{
http.Middleware(
recovery.Recovery(),
),
}
if c.Http.Network != "" {
opts = append(opts, http.Network(c.Http.Network))
}
if c.Http.Addr != "" {
opts = append(opts, http.Address(c.Http.Addr))
}
if c.Http.Timeout != nil {
opts = append(opts, http.Timeout(c.Http.Timeout.AsDuration()))
}
srv := http.NewServer(opts...)
// 上传文件
route := srv.Route("/")
route.POST("/upload", uploadFile) // 路由地址, 上传文件的函数
v1.RegisterGreeterHTTPServer(srv, greeter)
return srv
}