github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/apis/api_resumable_upload_v1_make_block.go (about) 1 // THIS FILE IS GENERATED BY api-generator, DO NOT EDIT DIRECTLY! 2 3 package apis 4 5 import ( 6 "context" 7 "net/http" 8 "strconv" 9 "strings" 10 11 uplog "github.com/qiniu/go-sdk/v7/internal/uplog" 12 resumableuploadv1makeblock "github.com/qiniu/go-sdk/v7/storagev2/apis/resumable_upload_v1_make_block" 13 errors "github.com/qiniu/go-sdk/v7/storagev2/errors" 14 httpclient "github.com/qiniu/go-sdk/v7/storagev2/http_client" 15 utils "github.com/qiniu/go-sdk/v7/storagev2/internal/utils" 16 region "github.com/qiniu/go-sdk/v7/storagev2/region" 17 ) 18 19 type innerResumableUploadV1MakeBlockRequest resumableuploadv1makeblock.Request 20 21 func (request *innerResumableUploadV1MakeBlockRequest) getBucketName(ctx context.Context) (string, error) { 22 if request.UpToken != nil { 23 if putPolicy, err := request.UpToken.GetPutPolicy(ctx); err != nil { 24 return "", err 25 } else { 26 return putPolicy.GetBucketName() 27 } 28 } 29 return "", nil 30 } 31 32 func (path *innerResumableUploadV1MakeBlockRequest) buildPath() ([]string, error) { 33 allSegments := make([]string, 0, 1) 34 if path.BlockSize != 0 { 35 allSegments = append(allSegments, strconv.FormatInt(path.BlockSize, 10)) 36 } else { 37 return nil, errors.MissingRequiredFieldError{Name: "BlockSize"} 38 } 39 return allSegments, nil 40 } 41 42 func (request *innerResumableUploadV1MakeBlockRequest) getAccessKey(ctx context.Context) (string, error) { 43 if request.UpToken != nil { 44 return request.UpToken.GetAccessKey(ctx) 45 } 46 return "", nil 47 } 48 49 type ( 50 ResumableUploadV1MakeBlockRequest = resumableuploadv1makeblock.Request 51 ResumableUploadV1MakeBlockResponse = resumableuploadv1makeblock.Response 52 ) 53 54 // 为后续分片上传创建一个新的块,同时上传第一片数据 55 func (storage *Storage) ResumableUploadV1MakeBlock(ctx context.Context, request *ResumableUploadV1MakeBlockRequest, options *Options) (*ResumableUploadV1MakeBlockResponse, error) { 56 if options == nil { 57 options = &Options{} 58 } 59 innerRequest := (*innerResumableUploadV1MakeBlockRequest)(request) 60 serviceNames := []region.ServiceName{region.ServiceUp} 61 if innerRequest.UpToken == nil { 62 return nil, errors.MissingRequiredFieldError{Name: "UpToken"} 63 } 64 pathSegments := make([]string, 0, 2) 65 pathSegments = append(pathSegments, "mkblk") 66 if segments, err := innerRequest.buildPath(); err != nil { 67 return nil, err 68 } else { 69 pathSegments = append(pathSegments, segments...) 70 } 71 path := "/" + strings.Join(pathSegments, "/") 72 var rawQuery string 73 headers := http.Header{} 74 body := innerRequest.Body 75 if body == nil { 76 return nil, errors.MissingRequiredFieldError{Name: "Body"} 77 } 78 hErr := utils.HttpHeadAddContentLength(headers, body) 79 if hErr != nil { 80 return nil, hErr 81 } 82 bucketName := options.OverwrittenBucketName 83 if bucketName == "" { 84 var err error 85 if bucketName, err = innerRequest.getBucketName(ctx); err != nil { 86 return nil, err 87 } 88 } 89 uplogInterceptor, err := uplog.NewRequestUplog("resumableUploadV1MakeBlock", bucketName, "", func() (string, error) { 90 return innerRequest.UpToken.GetUpToken(ctx) 91 }) 92 if err != nil { 93 return nil, err 94 } 95 req := httpclient.Request{Method: "POST", 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} 96 if options.OverwrittenEndpoints == nil && options.OverwrittenRegion == nil && storage.client.GetRegions() == nil { 97 bucketHosts := httpclient.DefaultBucketHosts() 98 if bucketName != "" { 99 query := storage.client.GetBucketQuery() 100 if query == nil { 101 if options.OverwrittenBucketHosts != nil { 102 if bucketHosts, err = options.OverwrittenBucketHosts.GetEndpoints(ctx); err != nil { 103 return nil, err 104 } 105 } 106 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()} 107 if hostRetryConfig := storage.client.GetHostRetryConfig(); hostRetryConfig != nil { 108 queryOptions.RetryMax = hostRetryConfig.RetryMax 109 queryOptions.Backoff = hostRetryConfig.Backoff 110 } 111 if query, err = region.NewBucketRegionsQuery(bucketHosts, &queryOptions); err != nil { 112 return nil, err 113 } 114 } 115 if query != nil { 116 var accessKey string 117 var err error 118 if accessKey, err = innerRequest.getAccessKey(ctx); err != nil { 119 return nil, err 120 } 121 if accessKey == "" { 122 if credentialsProvider := storage.client.GetCredentials(); credentialsProvider != nil { 123 if creds, err := credentialsProvider.Get(ctx); err != nil { 124 return nil, err 125 } else if creds != nil { 126 accessKey = creds.AccessKey 127 } 128 } 129 } 130 if accessKey != "" { 131 req.Region = query.Query(accessKey, bucketName) 132 } 133 } 134 } 135 } 136 var respBody ResumableUploadV1MakeBlockResponse 137 if err := storage.client.DoAndAcceptJSON(ctx, &req, &respBody); err != nil { 138 return nil, err 139 } 140 return &respBody, nil 141 }