github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/cmd/internal/openapi/v3/codegen/testdata/test/uploadclient.go (about) 1 package test 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "net/http" 8 9 "github.com/go-resty/resty/v2" 10 _querystring "github.com/google/go-querystring/query" 11 "github.com/opentracing-contrib/go-stdlib/nethttp" 12 "github.com/opentracing/opentracing-go" 13 "github.com/pkg/errors" 14 ddhttp "github.com/unionj-cloud/go-doudou/framework/http" 15 "github.com/unionj-cloud/go-doudou/framework/registry" 16 v3 "github.com/unionj-cloud/go-doudou/toolkit/openapi/v3" 17 ) 18 19 type UploadClient struct { 20 provider registry.IServiceProvider 21 client *resty.Client 22 rootPath string 23 } 24 25 func (receiver *UploadClient) SetRootPath(rootPath string) { 26 receiver.rootPath = rootPath 27 } 28 29 func (receiver *UploadClient) SetProvider(provider registry.IServiceProvider) { 30 receiver.provider = provider 31 } 32 33 func (receiver *UploadClient) SetClient(client *resty.Client) { 34 receiver.client = client 35 } 36 37 // PostUploadAvatar2 UploadAvatar2 demonstrate how to define upload files api 38 // remember to close the readers by Close method of v3.FileModel if you don't need them anymore when you finished your own business logic 39 func (receiver *UploadClient) PostUploadAvatar2(ctx context.Context, _headers map[string]string, 40 bodyParams struct { 41 // required 42 Ps string `json:"ps,omitempty" url:"ps"` 43 }, 44 pf []v3.FileModel, 45 pf2 *v3.FileModel, 46 pf3 *v3.FileModel) (ret UploadAvatar2Resp, _resp *resty.Response, err error) { 47 var _err error 48 49 _req := receiver.client.R() 50 _req.SetContext(ctx) 51 if len(_headers) > 0 { 52 _req.SetHeaders(_headers) 53 } 54 _bodyParams, _ := _querystring.Values(bodyParams) 55 _req.SetFormDataFromValues(_bodyParams) 56 if len(pf) == 0 { 57 err = errors.New("at least one file should be uploaded for parameter pf") 58 return 59 } 60 for _, _f := range pf { 61 _req.SetFileReader("pf", _f.Filename, _f.Reader) 62 } 63 if pf2 != nil { 64 _req.SetFileReader("pf2", pf2.Filename, pf2.Reader) 65 } 66 if pf3 != nil { 67 _req.SetFileReader("pf3", pf3.Filename, pf3.Reader) 68 } 69 70 _resp, _err = _req.Post("/upload/avatar/2") 71 if _err != nil { 72 err = errors.Wrap(_err, "") 73 return 74 } 75 if _resp.IsError() { 76 err = errors.New(_resp.String()) 77 return 78 } 79 if _err = json.Unmarshal(_resp.Body(), &ret); _err != nil { 80 err = errors.Wrap(_err, "") 81 return 82 } 83 return 84 } 85 86 // PostUploadAvatar UploadAvatar demonstrate how to define upload files api 87 // there must be one []v3.FileModel or v3.FileModel parameter among input parameters 88 // remember to close the readers by Close method of v3.FileModel if you don't need them anymore when you finished your own business logic 89 func (receiver *UploadClient) PostUploadAvatar(ctx context.Context, _headers map[string]string, 90 bodyParams struct { 91 // required 92 Ps string `json:"ps,omitempty" url:"ps"` 93 }, 94 pf []v3.FileModel) (ret UploadAvatarResp, _resp *resty.Response, err error) { 95 var _err error 96 97 _req := receiver.client.R() 98 _req.SetContext(ctx) 99 if len(_headers) > 0 { 100 _req.SetHeaders(_headers) 101 } 102 _bodyParams, _ := _querystring.Values(bodyParams) 103 _req.SetFormDataFromValues(_bodyParams) 104 if len(pf) == 0 { 105 err = errors.New("at least one file should be uploaded for parameter pf") 106 return 107 } 108 for _, _f := range pf { 109 _req.SetFileReader("pf", _f.Filename, _f.Reader) 110 } 111 112 _resp, _err = _req.Post("/upload/avatar") 113 if _err != nil { 114 err = errors.Wrap(_err, "") 115 return 116 } 117 if _resp.IsError() { 118 err = errors.New(_resp.String()) 119 return 120 } 121 if _err = json.Unmarshal(_resp.Body(), &ret); _err != nil { 122 err = errors.Wrap(_err, "") 123 return 124 } 125 return 126 } 127 128 func NewUpload(opts ...ddhttp.DdClientOption) *UploadClient { 129 defaultProvider := ddhttp.NewServiceProvider("UPLOAD") 130 defaultClient := ddhttp.NewClient() 131 132 svcClient := &UploadClient{ 133 provider: defaultProvider, 134 client: defaultClient, 135 } 136 137 for _, opt := range opts { 138 opt(svcClient) 139 } 140 141 svcClient.client.OnBeforeRequest(func(_ *resty.Client, request *resty.Request) error { 142 request.URL = svcClient.provider.SelectServer() + svcClient.rootPath + request.URL 143 return nil 144 }) 145 146 svcClient.client.SetPreRequestHook(func(_ *resty.Client, request *http.Request) error { 147 traceReq, _ := nethttp.TraceRequest(opentracing.GlobalTracer(), request, 148 nethttp.OperationName(fmt.Sprintf("HTTP %s: %s", request.Method, request.URL.Path))) 149 *request = *traceReq 150 return nil 151 }) 152 153 svcClient.client.OnAfterResponse(func(_ *resty.Client, response *resty.Response) error { 154 nethttp.TracerFromRequest(response.Request.RawRequest).Finish() 155 return nil 156 }) 157 158 return svcClient 159 }