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

Method putObjectMultipartNoStream

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

Source from the content-addressed store, hash-verified

57}
58
59func (c *Client) putObjectMultipartNoStream(ctx context.Context, bucketName, objectName string, reader io.Reader, opts PutObjectOptions) (info UploadInfo, err error) {
60 // Input validation.
61 if err = s3utils.CheckValidBucketName(bucketName); err != nil {
62 return UploadInfo{}, err
63 }
64 if err = s3utils.CheckValidObjectName(objectName); err != nil {
65 return UploadInfo{}, err
66 }
67
68 // Total data read and written to server. should be equal to
69 // 'size' at the end of the call.
70 var totalUploadedSize int64
71
72 // Complete multipart upload.
73 var complMultipartUpload completeMultipartUpload
74
75 // Calculate the optimal parts info for a given size.
76 totalPartsCount, partSize, _, err := OptimalPartInfo(-1, opts.PartSize)
77 if err != nil {
78 return UploadInfo{}, err
79 }
80
81 // Choose hash algorithms to be calculated by hashCopyN,
82 // avoid sha256 with non-v4 signature request or
83 // HTTPS connection.
84 hashAlgos, hashSums := c.hashMaterials(opts.SendContentMd5, !opts.DisableContentSha256)
85
86 // Initiate a new multipart upload.
87 uploadID, err := c.newUploadID(ctx, bucketName, objectName, opts)
88 if err != nil {
89 return UploadInfo{}, err
90 }
91
92 defer func() {
93 if err != nil {
94 c.abortMultipartUpload(ctx, bucketName, objectName, uploadID)
95 }
96 }()
97
98 // Part number always starts with '1'.
99 partNumber := 1
100
101 // Initialize parts uploaded map.
102 partsInfo := make(map[int]ObjectPart)
103
104 // Create a buffer.
105 buf := make([]byte, partSize)
106
107 // Create checksums
108 // CRC32C is ~50% faster on AMD64 @ 30GB/s
109 customHeader := make(http.Header)
110 crc := opts.AutoChecksum.Hasher()
111 for partNumber <= totalPartsCount {
112 length, rErr := readFull(reader, buf)
113 if rErr == io.EOF && partNumber > 1 {
114 break
115 }
116

Callers 1

putObjectMultipartMethod · 0.95

Calls 15

hashMaterialsMethod · 0.95
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

Tested by

no test coverage detected