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  }