diff --git a/API.md b/API.md index 76e8acd086..0554e90b30 100644 --- a/API.md +++ b/API.md @@ -53,8 +53,8 @@ func main() { |[`BucketExists`](#BucketExists) |[`CopyObject`](#CopyObject) |[`PresignedPostPolicy`](#PresignedPostPolicy) | | | [`RemoveBucket`](#RemoveBucket) |[`StatObject`](#StatObject) | | | |[`ListObjects`](#ListObjects) |[`RemoveObject`](#RemoveObject) | | | -|[`ListIncompleteUploads`](#ListIncompleteUploads) | [`RemoveIncompleteUpload`](#RemoveIncompleteUpload) | | | -| |[`FPutObject`](#FPutObject) | | | +|[`ListObjectsV2`](#ListObjectsV2) | [`RemoveIncompleteUpload`](#RemoveIncompleteUpload) | | | +|[`ListIncompleteUploads`](#ListIncompleteUploads) |[`FPutObject`](#FPutObject) | | | | | [`FGetObject`](#FGetObject) | | | ## 1. Constructor @@ -257,6 +257,67 @@ for object := range objectCh { } ``` + +#### ListObjectsV2(bucketName string, prefix string, recursive bool, doneCh chan struct{}) <-chan ObjectInfo +Lists objects in a bucket using the recommanded listing API v2 + +__Parameters__ + +|Param |Type |Description | +|:---|:---| :---| +|`bucketName` | _string_ |name of the bucket. | +| `objectPrefix` |_string_ | the prefix of the objects that should be listed. | +| `recursive` | _bool_ |`true` indicates recursive style listing and `false` indicates directory style listing delimited by '/'. | +|`doneCh` | _chan struct{}_ | Set this value to 'true' to enable secure (HTTPS) access. | + +__Return Value__ + + + + + + + + + + + + + + + + +
ParamTypeDescription
+ chan ObjectInfo + chan ObjectInfo +
    Read channel for all the objects in the bucket, the object is of the format: +
  • objectInfo.Key string: name of the object.
  • +
  • objectInfo.Size int64: size of the object.
  • +
  • objectInfo.ETag string: etag of the object.
  • +
  • objectInfo.LastModified time.Time: modified time stamp.
  • +
+
+ +```go +// Create a done channel to control 'ListObjectsV2' go routine. +doneCh := make(chan struct{}) + +// Indicate to our routine to exit cleanly upon return. +defer close(doneCh) + +isRecursive := true +objectCh := minioClient.ListObjectsV2("mybucket", "myprefix", isRecursive, doneCh) +for object := range objectCh { + if object.Err != nil { + fmt.Println(object.Err) + return + } + fmt.Println(object) +} +``` + + +
#### ListIncompleteUploads(bucketName string, prefix string, recursive bool, doneCh chan struct{}) <- chan ObjectMultipartInfo Lists partially uploaded objects in a bucket. diff --git a/README.md b/README.md index c3750f948b..50b79268b7 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ The full API Reference is available here. * [`BucketExists`](https://docs.minio.io/docs/golang-client-api-reference#BucketExists) * [`RemoveBucket`](https://docs.minio.io/docs/golang-client-api-reference#RemoveBucket) * [`ListObjects`](https://docs.minio.io/docs/golang-client-api-reference#ListObjects) +* ListObjectsV2 * [`ListIncompleteUploads`](https://docs.minio.io/docs/golang-client-api-reference#ListIncompleteUploads) ### API Reference : Bucket policy Operations @@ -167,6 +168,7 @@ The full API Reference is available here. * [putobject.go](./examples/s3/putobject.go) * [getobject.go](./examples/s3/getobject.go) * [listobjects.go](./examples/s3/listobjects.go) +* [listobjectsV2.go](./examples/s3/listobjectsV2.go) * [removeobject.go](./examples/s3/removeobject.go) * [statobject.go](./examples/s3/statobject.go) diff --git a/examples/s3/listobjectsV2.go b/examples/s3/listobjectsV2.go new file mode 100644 index 0000000000..b52b4dab87 --- /dev/null +++ b/examples/s3/listobjectsV2.go @@ -0,0 +1,57 @@ +// +build ignore + +/* + * Minio Go Library for Amazon S3 Compatible Cloud Storage (C) 2016 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "fmt" + + "github.com/minio/minio-go" +) + +func main() { + // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY, my-bucketname and my-prefixname + // are dummy values, please replace them with original values. + + // Requests are always secure (HTTPS) by default. Set secure=false to enable insecure (HTTP) access. + // This boolean value is the last argument for New(). + + // New returns an Amazon S3 compatible client object. API compatibility (v2 or v4) is automatically + // determined based on the Endpoint value. + s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", true) + if err != nil { + fmt.Println(err) + return + } + + // Create a done channel to control 'ListObjects' go routine. + doneCh := make(chan struct{}) + + // Indicate to our routine to exit cleanly upon return. + defer close(doneCh) + + // List all objects from a bucket-name with a matching prefix. + for object := range s3Client.ListObjectsV2("my-bucketname", "my-prefixname", true, doneCh) { + if object.Err != nil { + fmt.Println(object.Err) + return + } + fmt.Println(object) + } + return +}