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

Method listObjects

api-list.go:312–379  ·  view source on GitHub ↗
(ctx context.Context, bucketName string, opts ListObjectsOptions)

Source from the content-addressed store, hash-verified

310}
311
312func (c *Client) listObjects(ctx context.Context, bucketName string, opts ListObjectsOptions) iter.Seq[ObjectInfo] {
313 // Default listing is delimited at "/"
314 delimiter := "/"
315 if opts.Recursive {
316 // If recursive we do not delimit.
317 delimiter = ""
318 }
319
320 return func(yield func(ObjectInfo) bool) {
321 if contextCanceled(ctx) {
322 return
323 }
324
325 // Validate bucket name.
326 if err := s3utils.CheckValidBucketName(bucketName); err != nil {
327 yield(ObjectInfo{Err: err})
328 return
329 }
330
331 // Validate incoming object prefix.
332 if err := s3utils.CheckValidObjectNamePrefix(opts.Prefix); err != nil {
333 yield(ObjectInfo{Err: err})
334 return
335 }
336
337 marker := opts.StartAfter
338 for {
339 if contextCanceled(ctx) {
340 return
341 }
342
343 // Get list of objects a maximum of 1000 per request.
344 result, err := c.listObjectsQuery(ctx, bucketName, opts.Prefix, marker, delimiter, opts.MaxKeys, opts.headers)
345 if err != nil {
346 yield(ObjectInfo{Err: err})
347 return
348 }
349
350 // If contents are available loop through and send over channel.
351 for _, object := range result.Contents {
352 // Save the marker.
353 marker = object.Key
354 object.ETag = trimEtag(object.ETag)
355 if !yield(object) {
356 return
357 }
358 }
359
360 // Send all common prefixes if any.
361 // NOTE: prefixes are only present if the request is delimited.
362 for _, obj := range result.CommonPrefixes {
363 if !yield(ObjectInfo{Key: obj.Prefix}) {
364 return
365 }
366 }
367
368 // If next marker present, save it for next request.
369 if result.NextMarker != "" {

Callers 2

ListObjectsMethod · 0.95
ListObjectsIterMethod · 0.95

Calls 5

listObjectsQueryMethod · 0.95
CheckValidBucketNameFunction · 0.92
contextCanceledFunction · 0.85
trimEtagFunction · 0.85

Tested by

no test coverage detected