github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/form/api/main.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "context" 6 "fmt" 7 "mime" 8 "mime/multipart" 9 "strings" 10 11 proto "github.com/micro/go-micro/examples/form/api/proto" 12 "github.com/micro/go-micro/v2" 13 api "github.com/micro/go-micro/v2/api/proto" 14 "github.com/micro/go-micro/v2/util/log" 15 ) 16 17 type Form struct{} 18 19 func (f *Form) Submit(ctx context.Context, req *api.Request, rsp *api.Response) error { 20 rsp.Body = fmt.Sprintf("got your values %+v", req.Post) 21 return nil 22 } 23 24 func (f *Form) Multipart(ctx context.Context, req *api.Request, rsp *api.Response) error { 25 ct := strings.Join(req.Header["Content-Type"].Values, ",") 26 mt, p, err := mime.ParseMediaType(ct) 27 if err != nil { 28 return err 29 } 30 if !strings.HasPrefix(mt, "multipart/") { 31 return fmt.Errorf("%v does not contain multipart", mt) 32 } 33 r := multipart.NewReader(bytes.NewReader([]byte(req.Body)), p["boundary"]) 34 form, err := r.ReadForm(32 << 20) 35 if err != nil { 36 return err 37 } 38 rsp.Body = fmt.Sprintf("got your values %+v", form) 39 return nil 40 } 41 42 func main() { 43 service := micro.NewService( 44 micro.Name("go.micro.api.form"), 45 ) 46 47 service.Init() 48 49 proto.RegisterFormHandler(service.Server(), new(Form)) 50 51 if err := service.Run(); err != nil { 52 log.Fatal(err) 53 } 54 }