From abe66b6619418d457e9d753e2ed994d978f06ff3 Mon Sep 17 00:00:00 2001 From: xuty <xty50337@hotmail.com> Date: Sun, 12 Dec 2021 23:11:20 +0800 Subject: [PATCH] Add listAllObjects() & listAllObjectsV2() --- lib/src/minio.dart | 64 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git a/lib/src/minio.dart b/lib/src/minio.dart index d4732f4..5884ace 100644 --- a/lib/src/minio.dart +++ b/lib/src/minio.dart @@ -488,8 +488,8 @@ class Minio { } /// Returns all [Object]s in a bucket. - /// If recursive is true, the returned stream may also contains [CommonPrefix] - Stream<ListObjectsChunk> listObjects( + /// To list objects in a bucket with prefix, set [prefix] to the desired prefix. + Stream<ListObjectsResult> listObjects( String bucket, { String prefix = '', bool recursive = false, @@ -511,13 +511,33 @@ class Minio { ); isTruncated = resp.isTruncated!; marker = resp.nextMarker; - yield ListObjectsChunk( + yield ListObjectsResult( objects: resp.contents!, - prefixes: resp.commonPrefixes.map((e) => e.prefix).toList(), + prefixes: resp.commonPrefixes.map((e) => e.prefix!).toList(), ); } while (isTruncated); } + /// Returns all [Object]s in a bucket. This is a shortcut for [listObjects]. + /// Use [listObjects] to list buckets with a large number of objects. + Future<ListObjectsResult> listAllObjects( + String bucket, { + String prefix = '', + bool recursive = false, + }) async { + final chunks = listObjects(bucket, prefix: prefix, recursive: recursive); + final objects = <Object>[]; + final prefixes = <String>[]; + await for (final chunk in chunks) { + objects.addAll(chunk.objects); + prefixes.addAll(chunk.prefixes); + } + return ListObjectsResult( + objects: objects, + prefixes: prefixes, + ); + } + /// list a batch of objects Future<ListObjectsOutput> listObjectsQuery( String bucket, @@ -566,8 +586,10 @@ class Minio { } /// Returns all [Object]s in a bucket. - /// If recursive is true, the returned stream may also contains [CommonPrefix] - Stream<ListObjectsChunk> listObjectsV2( + /// To list objects in a bucket with prefix, set [prefix] to the desired prefix. + /// This uses ListObjectsV2 in the S3 API. For backward compatibility, use + /// [listObjects] instead. + Stream<ListObjectsResult> listObjectsV2( String bucket, { String prefix = '', bool recursive = false, @@ -591,13 +613,35 @@ class Minio { ); isTruncated = resp.isTruncated; continuationToken = resp.nextContinuationToken; - yield ListObjectsChunk( + yield ListObjectsResult( objects: resp.contents!, - prefixes: resp.commonPrefixes.map((e) => e.prefix).toList(), + prefixes: resp.commonPrefixes.map((e) => e.prefix!).toList(), ); } while (isTruncated!); } + /// Returns all [Object]s in a bucket. This is a shortcut for [listObjectsV2]. + /// Use [listObjects] to list buckets with a large number of objects. + /// This uses ListObjectsV2 in the S3 API. For backward compatibility, use + /// [listAllObjects] instead. + Future<ListObjectsResult> listAllObjectsV2( + String bucket, { + String prefix = '', + bool recursive = false, + }) async { + final chunks = listObjects(bucket, prefix: prefix, recursive: recursive); + final objects = <Object>[]; + final prefixes = <String>[]; + await for (final chunk in chunks) { + objects.addAll(chunk.objects); + prefixes.addAll(chunk.prefixes); + } + return ListObjectsResult( + objects: objects, + prefixes: prefixes, + ); + } + /// listObjectsV2Query - (List Objects V2) - List some or all (up to 1000) of the objects in a bucket. Future<ListObjectsV2Output> listObjectsV2Query( String bucket, @@ -1033,7 +1077,9 @@ class Minio { ); return AccessControlPolicy.fromXml( - xml.XmlDocument.parse(resp.body).firstChild as XmlElement?, + xml.XmlDocument.parse(resp.body) + .findElements('AccessControlPolicy') + .first, ); } -- GitLab