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

Method putObjectMultipartStreamNoLength

api-put-object.go:393–539  ·  view source on GitHub ↗
(ctx context.Context, bucketName, objectName string, reader io.Reader, opts PutObjectOptions)

Source from the content-addressed store, hash-verified

391}
392
393func (c *Client) putObjectMultipartStreamNoLength(ctx context.Context, bucketName, objectName string, reader io.Reader, opts PutObjectOptions) (info UploadInfo, err error) {
394 // Input validation.
395 if err = s3utils.CheckValidBucketName(bucketName); err != nil {
396 return UploadInfo{}, err
397 }
398 if err = s3utils.CheckValidObjectName(objectName); err != nil {
399 return UploadInfo{}, err
400 }
401
402 // Total data read and written to server. should be equal to
403 // 'size' at the end of the call.
404 var totalUploadedSize int64
405
406 // Complete multipart upload.
407 var complMultipartUpload completeMultipartUpload
408
409 // Calculate the optimal parts info for a given size.
410 totalPartsCount, partSize, _, err := OptimalPartInfo(-1, opts.PartSize)
411 if err != nil {
412 return UploadInfo{}, err
413 }
414
415 // Initiate a new multipart upload.
416 uploadID, err := c.newUploadID(ctx, bucketName, objectName, opts)
417 if err != nil {
418 return UploadInfo{}, err
419 }
420
421 defer func() {
422 if err != nil {
423 c.abortMultipartUpload(ctx, bucketName, objectName, uploadID)
424 }
425 }()
426
427 // Part number always starts with '1'.
428 partNumber := 1
429
430 // Initialize parts uploaded map.
431 partsInfo := make(map[int]ObjectPart)
432
433 // Create a buffer.
434 buf := make([]byte, partSize)
435
436 // Create checksums
437 // CRC32C is ~50% faster on AMD64 @ 30GB/s
438 customHeader := make(http.Header)
439 crc := opts.AutoChecksum.Hasher()
440
441 for partNumber <= totalPartsCount {
442 length, rerr := readFull(reader, buf)
443 if rerr == io.EOF && partNumber > 1 {
444 break
445 }
446
447 if rerr != nil && rerr != io.ErrUnexpectedEOF && rerr != io.EOF {
448 return UploadInfo{}, rerr
449 }
450

Callers 1

PutObjectMethod · 0.95

Calls 15

newUploadIDMethod · 0.95
abortMultipartUploadMethod · 0.95
uploadPartMethod · 0.95
CheckValidBucketNameFunction · 0.92
CheckValidObjectNameFunction · 0.92
OptimalPartInfoFunction · 0.85
newHookFunction · 0.85
errInvalidArgumentFunction · 0.85
completedPartsTypeAlias · 0.85
applyAutoChecksumFunction · 0.85
HasherMethod · 0.80

Tested by

no test coverage detected