github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/apis/api_resumable_upload_v2_upload_part.go (about) 1 // THIS FILE IS GENERATED BY api-generator, DO NOT EDIT DIRECTLY! 2 3 package apis 4 5 import ( 6 "context" 7 "encoding/base64" 8 "net/http" 9 "strconv" 10 "strings" 11 12 uplog "github.com/qiniu/go-sdk/v7/internal/uplog" 13 resumableuploadv2uploadpart "github.com/qiniu/go-sdk/v7/storagev2/apis/resumable_upload_v2_upload_part" 14 errors "github.com/qiniu/go-sdk/v7/storagev2/errors" 15 httpclient "github.com/qiniu/go-sdk/v7/storagev2/http_client" 16 utils "github.com/qiniu/go-sdk/v7/storagev2/internal/utils" 17 region "github.com/qiniu/go-sdk/v7/storagev2/region" 18 ) 19 20 type innerResumableUploadV2UploadPartRequest resumableuploadv2uploadpart.Request 21 22 func (request *innerResumableUploadV2UploadPartRequest) getBucketName(ctx context.Context) (string, error) { 23 if request.UpToken != nil { 24 if putPolicy, err := request.UpToken.GetPutPolicy(ctx); err != nil { 25 return "", err 26 } else { 27 return putPolicy.GetBucketName() 28 } 29 } 30 return "", nil 31 } 32 33 func (path *innerResumableUploadV2UploadPartRequest) buildPath() ([]string, error) { 34 allSegments := make([]string, 0, 6) 35 if path.BucketName != "" { 36 allSegments = append(allSegments, path.BucketName) 37 } else { 38 return nil, errors.MissingRequiredFieldError{Name: "BucketName"} 39 } 40 if path.ObjectName != nil { 41 allSegments = append(allSegments, "objects", base64.URLEncoding.EncodeToString([]byte(*path.ObjectName))) 42 } else { 43 allSegments = append(allSegments, "objects", "~") 44 } 45 if path.UploadId != "" { 46 allSegments = append(allSegments, "uploads", path.UploadId) 47 } else { 48 return nil, errors.MissingRequiredFieldError{Name: "UploadId"} 49 } 50 if path.PartNumber != 0 { 51 allSegments = append(allSegments, strconv.FormatInt(path.PartNumber, 10)) 52 } else { 53 return nil, errors.MissingRequiredFieldError{Name: "PartNumber"} 54 } 55 return allSegments, nil 56 } 57 58 func (headers *innerResumableUploadV2UploadPartRequest) buildHeaders() (http.Header, error) { 59 allHeaders := make(http.Header) 60 if headers.Md5 != "" { 61 allHeaders.Set("Content-MD5", headers.Md5) 62 } 63 return allHeaders, nil 64 } 65 66 func (request *innerResumableUploadV2UploadPartRequest) getAccessKey(ctx context.Context) (string, error) { 67 if request.UpToken != nil { 68 return request.UpToken.GetAccessKey(ctx) 69 } 70 return "", nil 71 } 72 73 type ( 74 ResumableUploadV2UploadPartRequest = resumableuploadv2uploadpart.Request 75 ResumableUploadV2UploadPartResponse = resumableuploadv2uploadpart.Response 76 ) 77 78 // 初始化一个 Multipart Upload 任务之后,可以根据指定的对象名称和 UploadId 来分片上传数据 79 func (storage *Storage) ResumableUploadV2UploadPart(ctx context.Context, request *ResumableUploadV2UploadPartRequest, options *Options) (*ResumableUploadV2UploadPartResponse, error) { 80 if options == nil { 81 options = &Options{} 82 } 83 innerRequest := (*innerResumableUploadV2UploadPartRequest)(request) 84 serviceNames := []region.ServiceName{region.ServiceUp} 85 if innerRequest.UpToken == nil { 86 return nil, errors.MissingRequiredFieldError{Name: "UpToken"} 87 } 88 pathSegments := make([]string, 0, 7) 89 pathSegments = append(pathSegments, "buckets") 90 if segments, err := innerRequest.buildPath(); err != nil { 91 return nil, err 92 } else { 93 pathSegments = append(pathSegments, segments...) 94 } 95 path := "/" + strings.Join(pathSegments, "/") 96 var rawQuery string 97 headers, err := innerRequest.buildHeaders() 98 if err != nil { 99 return nil, err 100 } 101 body := innerRequest.Body 102 if body == nil { 103 return nil, errors.MissingRequiredFieldError{Name: "Body"} 104 } 105 hErr := utils.HttpHeadAddContentLength(headers, body) 106 if hErr != nil { 107 return nil, hErr 108 } 109 bucketName := options.OverwrittenBucketName 110 if bucketName == "" { 111 var err error 112 if bucketName, err = innerRequest.getBucketName(ctx); err != nil { 113 return nil, err 114 } 115 } 116 uplogInterceptor, err := uplog.NewRequestUplog("resumableUploadV2UploadPart", bucketName, "", func() (string, error) { 117 return innerRequest.UpToken.GetUpToken(ctx) 118 }) 119 if err != nil { 120 return nil, err 121 } 122 req := httpclient.Request{Method: "PUT", ServiceNames: serviceNames, Path: path, RawQuery: rawQuery, Endpoints: options.OverwrittenEndpoints, Region: options.OverwrittenRegion, Interceptors: []httpclient.Interceptor{uplogInterceptor}, Header: headers, UpToken: innerRequest.UpToken, BufferResponse: true, RequestBody: httpclient.GetRequestBodyFromReadSeekCloser(body), OnRequestProgress: options.OnRequestProgress} 123 if options.OverwrittenEndpoints == nil && options.OverwrittenRegion == nil && storage.client.GetRegions() == nil { 124 bucketHosts := httpclient.DefaultBucketHosts() 125 if bucketName != "" { 126 query := storage.client.GetBucketQuery() 127 if query == nil { 128 if options.OverwrittenBucketHosts != nil { 129 if bucketHosts, err = options.OverwrittenBucketHosts.GetEndpoints(ctx); err != nil { 130 return nil, err 131 } 132 } 133 queryOptions := region.BucketRegionsQueryOptions{UseInsecureProtocol: storage.client.UseInsecureProtocol(), AccelerateUploading: storage.client.AccelerateUploadingEnabled(), HostFreezeDuration: storage.client.GetHostFreezeDuration(), Resolver: storage.client.GetResolver(), Chooser: storage.client.GetChooser(), BeforeResolve: storage.client.GetBeforeResolveCallback(), AfterResolve: storage.client.GetAfterResolveCallback(), ResolveError: storage.client.GetResolveErrorCallback(), BeforeBackoff: storage.client.GetBeforeBackoffCallback(), AfterBackoff: storage.client.GetAfterBackoffCallback(), BeforeRequest: storage.client.GetBeforeRequestCallback(), AfterResponse: storage.client.GetAfterResponseCallback()} 134 if hostRetryConfig := storage.client.GetHostRetryConfig(); hostRetryConfig != nil { 135 queryOptions.RetryMax = hostRetryConfig.RetryMax 136 queryOptions.Backoff = hostRetryConfig.Backoff 137 } 138 if query, err = region.NewBucketRegionsQuery(bucketHosts, &queryOptions); err != nil { 139 return nil, err 140 } 141 } 142 if query != nil { 143 var accessKey string 144 var err error 145 if accessKey, err = innerRequest.getAccessKey(ctx); err != nil { 146 return nil, err 147 } 148 if accessKey == "" { 149 if credentialsProvider := storage.client.GetCredentials(); credentialsProvider != nil { 150 if creds, err := credentialsProvider.Get(ctx); err != nil { 151 return nil, err 152 } else if creds != nil { 153 accessKey = creds.AccessKey 154 } 155 } 156 } 157 if accessKey != "" { 158 req.Region = query.Query(accessKey, bucketName) 159 } 160 } 161 } 162 } 163 var respBody ResumableUploadV2UploadPartResponse 164 if err := storage.client.DoAndAcceptJSON(ctx, &req, &respBody); err != nil { 165 return nil, err 166 } 167 return &respBody, nil 168 }