github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/apis/api_resumable_upload_v1_make_file.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 resumableuploadv1makefile "github.com/qiniu/go-sdk/v7/storagev2/apis/resumable_upload_v1_make_file" 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 innerResumableUploadV1MakeFileRequest resumableuploadv1makefile.Request 21 22 func (request *innerResumableUploadV1MakeFileRequest) 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 *innerResumableUploadV1MakeFileRequest) buildPath() ([]string, error) { 34 allSegments := make([]string, 0, 7) 35 allSegments = append(allSegments, strconv.FormatInt(path.Size, 10)) 36 if path.ObjectName != nil { 37 allSegments = append(allSegments, "key", base64.URLEncoding.EncodeToString([]byte(*path.ObjectName))) 38 } 39 if path.FileName != "" { 40 allSegments = append(allSegments, "fname", base64.URLEncoding.EncodeToString([]byte(path.FileName))) 41 } 42 if path.MimeType != "" { 43 allSegments = append(allSegments, "mimeType", base64.URLEncoding.EncodeToString([]byte(path.MimeType))) 44 } 45 for key, value := range path.CustomData { 46 allSegments = append(allSegments, key) 47 allSegments = append(allSegments, base64.URLEncoding.EncodeToString([]byte(value))) 48 } 49 return allSegments, nil 50 } 51 52 func (request *innerResumableUploadV1MakeFileRequest) getAccessKey(ctx context.Context) (string, error) { 53 if request.UpToken != nil { 54 return request.UpToken.GetAccessKey(ctx) 55 } 56 return "", nil 57 } 58 59 type ( 60 ResumableUploadV1MakeFileRequest = resumableuploadv1makefile.Request 61 ResumableUploadV1MakeFileResponse = resumableuploadv1makefile.Response 62 ) 63 64 // 将上传好的所有数据块按指定顺序合并成一个资源文件 65 func (storage *Storage) ResumableUploadV1MakeFile(ctx context.Context, request *ResumableUploadV1MakeFileRequest, options *Options) (*ResumableUploadV1MakeFileResponse, error) { 66 if options == nil { 67 options = &Options{} 68 } 69 innerRequest := (*innerResumableUploadV1MakeFileRequest)(request) 70 serviceNames := []region.ServiceName{region.ServiceUp} 71 if innerRequest.UpToken == nil { 72 return nil, errors.MissingRequiredFieldError{Name: "UpToken"} 73 } 74 pathSegments := make([]string, 0, 8) 75 pathSegments = append(pathSegments, "mkfile") 76 if segments, err := innerRequest.buildPath(); err != nil { 77 return nil, err 78 } else { 79 pathSegments = append(pathSegments, segments...) 80 } 81 path := "/" + strings.Join(pathSegments, "/") 82 var rawQuery string 83 headers := http.Header{} 84 body := innerRequest.Body 85 if body == nil { 86 return nil, errors.MissingRequiredFieldError{Name: "Body"} 87 } 88 hErr := utils.HttpHeadAddContentLength(headers, body) 89 if hErr != nil { 90 return nil, hErr 91 } 92 bucketName := options.OverwrittenBucketName 93 if bucketName == "" { 94 var err error 95 if bucketName, err = innerRequest.getBucketName(ctx); err != nil { 96 return nil, err 97 } 98 } 99 uplogInterceptor, err := uplog.NewRequestUplog("resumableUploadV1MakeFile", bucketName, "", func() (string, error) { 100 return innerRequest.UpToken.GetUpToken(ctx) 101 }) 102 if err != nil { 103 return nil, err 104 } 105 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} 106 if options.OverwrittenEndpoints == nil && options.OverwrittenRegion == nil && storage.client.GetRegions() == nil { 107 bucketHosts := httpclient.DefaultBucketHosts() 108 if bucketName != "" { 109 query := storage.client.GetBucketQuery() 110 if query == nil { 111 if options.OverwrittenBucketHosts != nil { 112 if bucketHosts, err = options.OverwrittenBucketHosts.GetEndpoints(ctx); err != nil { 113 return nil, err 114 } 115 } 116 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()} 117 if hostRetryConfig := storage.client.GetHostRetryConfig(); hostRetryConfig != nil { 118 queryOptions.RetryMax = hostRetryConfig.RetryMax 119 queryOptions.Backoff = hostRetryConfig.Backoff 120 } 121 if query, err = region.NewBucketRegionsQuery(bucketHosts, &queryOptions); err != nil { 122 return nil, err 123 } 124 } 125 if query != nil { 126 var accessKey string 127 var err error 128 if accessKey, err = innerRequest.getAccessKey(ctx); err != nil { 129 return nil, err 130 } 131 if accessKey == "" { 132 if credentialsProvider := storage.client.GetCredentials(); credentialsProvider != nil { 133 if creds, err := credentialsProvider.Get(ctx); err != nil { 134 return nil, err 135 } else if creds != nil { 136 accessKey = creds.AccessKey 137 } 138 } 139 } 140 if accessKey != "" { 141 req.Region = query.Query(accessKey, bucketName) 142 } 143 } 144 } 145 } 146 respBody := ResumableUploadV1MakeFileResponse{Body: innerRequest.ResponseBody} 147 if err := storage.client.DoAndAcceptJSON(ctx, &req, &respBody); err != nil { 148 return nil, err 149 } 150 return &respBody, nil 151 }