MCPcopy
hub / github.com/minio/minio-go / initiateMultipartUpload

Method initiateMultipartUpload

api-put-object-multipart.go:221–271  ·  view source on GitHub ↗

initiateMultipartUpload - Initiates a multipart upload and returns an upload ID.

(ctx context.Context, bucketName, objectName string, opts PutObjectOptions)

Source from the content-addressed store, hash-verified

219
220// initiateMultipartUpload - Initiates a multipart upload and returns an upload ID.
221func (c *Client) initiateMultipartUpload(ctx context.Context, bucketName, objectName string, opts PutObjectOptions) (initiateMultipartUploadResult, error) {
222 // Input validation.
223 if err := s3utils.CheckValidBucketName(bucketName); err != nil {
224 return initiateMultipartUploadResult{}, err
225 }
226 if err := s3utils.CheckValidObjectName(objectName); err != nil {
227 return initiateMultipartUploadResult{}, err
228 }
229
230 // Initialize url queries.
231 urlValues := make(url.Values)
232 urlValues.Set("uploads", "")
233
234 if opts.Internal.SourceVersionID != "" {
235 if opts.Internal.SourceVersionID != nullVersionID {
236 if _, err := uuid.Parse(opts.Internal.SourceVersionID); err != nil {
237 return initiateMultipartUploadResult{}, errInvalidArgument(err.Error())
238 }
239 }
240 urlValues.Set("versionId", opts.Internal.SourceVersionID)
241 }
242
243 // Set ContentType header.
244 customHeader := opts.Header()
245
246 reqMetadata := requestMetadata{
247 bucketName: bucketName,
248 objectName: objectName,
249 queryValues: urlValues,
250 customHeader: customHeader,
251 }
252
253 // Execute POST on an objectName to initiate multipart upload.
254 resp, err := c.executeMethod(ctx, http.MethodPost, reqMetadata)
255 defer closeResponse(resp)
256 if err != nil {
257 return initiateMultipartUploadResult{}, err
258 }
259 if resp != nil {
260 if resp.StatusCode != http.StatusOK {
261 return initiateMultipartUploadResult{}, httpRespToErrorResponse(resp, bucketName, objectName)
262 }
263 }
264 // Decode xml for new multipart upload.
265 initiateMultipartUploadResult := initiateMultipartUploadResult{}
266 err = xmlDecoder(resp.Body, &initiateMultipartUploadResult)
267 if err != nil {
268 return initiateMultipartUploadResult, err
269 }
270 return initiateMultipartUploadResult, nil
271}
272
273type uploadPartParams struct {
274 bucketName string

Callers 3

newUploadIDMethod · 0.95
Test_SSEHeadersFunction · 0.80
NewMultipartUploadMethod · 0.80

Calls 10

executeMethodMethod · 0.95
CheckValidBucketNameFunction · 0.92
CheckValidObjectNameFunction · 0.92
errInvalidArgumentFunction · 0.85
httpRespToErrorResponseFunction · 0.85
closeResponseFunction · 0.70
xmlDecoderFunction · 0.70
SetMethod · 0.45
ErrorMethod · 0.45
HeaderMethod · 0.45

Tested by 1

Test_SSEHeadersFunction · 0.64