通过Kratos内置HTTP框架(非RPC)mux上传文件
- 编写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}