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

Method appendObjectDo

api-append-object.go:108–185  ·  view source on GitHub ↗

appendObjectDo - executes the append object http operation. NOTE: You must have WRITE permissions on a bucket to add an object to it.

(ctx context.Context, bucketName, objectName string, reader io.Reader, size int64, opts AppendObjectOptions)

Source from the content-addressed store, hash-verified

106// appendObjectDo - executes the append object http operation.
107// NOTE: You must have WRITE permissions on a bucket to add an object to it.
108func (c *Client) appendObjectDo(ctx context.Context, bucketName, objectName string, reader io.Reader, size int64, opts AppendObjectOptions) (UploadInfo, error) {
109 // Input validation.
110 if err := s3utils.CheckValidBucketName(bucketName); err != nil {
111 return UploadInfo{}, err
112 }
113 if err := s3utils.CheckValidObjectName(objectName); err != nil {
114 return UploadInfo{}, err
115 }
116
117 // Set headers.
118 customHeader := opts.Header()
119
120 // Populate request metadata.
121 reqMetadata := requestMetadata{
122 bucketName: bucketName,
123 objectName: objectName,
124 customHeader: customHeader,
125 contentBody: reader,
126 contentLength: size,
127 streamSha256: !opts.DisableContentSha256,
128 }
129
130 if opts.checksumType.IsSet() {
131 reqMetadata.addCrc = &opts.checksumType
132 reqMetadata.customHeader.Set(amzChecksumAlgo, opts.checksumType.String())
133 if opts.checksumType.FullObjectRequested() {
134 reqMetadata.customHeader.Set(amzChecksumMode, ChecksumFullObjectMode.String())
135 }
136 }
137
138 // Execute PUT an objectName.
139 resp, err := c.executeMethod(ctx, http.MethodPut, reqMetadata)
140 defer closeResponse(resp)
141 if err != nil {
142 return UploadInfo{}, err
143 }
144 if resp != nil {
145 if resp.StatusCode != http.StatusOK {
146 return UploadInfo{}, httpRespToErrorResponse(resp, bucketName, objectName)
147 }
148 }
149
150 h := resp.Header
151
152 // When AppendObject() is used, S3 Express will return final object size as x-amz-object-size
153 if amzSize := h.Get("x-amz-object-size"); amzSize != "" {
154 oSize := size
155 size, err = strconv.ParseInt(amzSize, 10, 64)
156 if err != nil {
157 return UploadInfo{}, err
158 }
159 if size != opts.offset+oSize {
160 return UploadInfo{}, errors.New("server returned incorrect object size")
161 }
162 } else {
163 return UploadInfo{}, errors.New("server does not support appends. Object has been overwritten")
164 }
165

Callers 1

AppendObjectMethod · 0.95

Calls 13

executeMethodMethod · 0.95
CheckValidBucketNameFunction · 0.92
CheckValidObjectNameFunction · 0.92
httpRespToErrorResponseFunction · 0.85
trimEtagFunction · 0.85
FullObjectRequestedMethod · 0.80
closeResponseFunction · 0.70
HeaderMethod · 0.45
IsSetMethod · 0.45
SetMethod · 0.45
StringMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected