aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2018-07-23 01:55:26 -0700
committerChris Lu <chris.lu@gmail.com>2018-07-23 01:55:26 -0700
commit6039b25bc9566afcac48384584bb15670bbc4619 (patch)
treeee8f8c50fc367a4fd0ccd720d0680a29bba41ef4
parent3c7ffa2a2cf05143b6ac22ea869573bd43e60510 (diff)
downloadseaweedfs-6039b25bc9566afcac48384584bb15670bbc4619.tar.xz
seaweedfs-6039b25bc9566afcac48384584bb15670bbc4619.zip
s3API working with listing objects
-rw-r--r--weed/s3api/s3api_objects_list_handlers.go56
1 files changed, 30 insertions, 26 deletions
diff --git a/weed/s3api/s3api_objects_list_handlers.go b/weed/s3api/s3api_objects_list_handlers.go
index 4714fdf14..a0ab9b964 100644
--- a/weed/s3api/s3api_objects_list_handlers.go
+++ b/weed/s3api/s3api_objects_list_handlers.go
@@ -12,6 +12,8 @@ import (
"path/filepath"
"strconv"
"time"
+ "github.com/aws/aws-sdk-go/service/s3"
+ "github.com/aws/aws-sdk-go/aws"
)
const (
@@ -26,6 +28,8 @@ func (s3a *S3ApiServer) ListObjectsV2Handler(w http.ResponseWriter, r *http.Requ
vars := mux.Vars(r)
bucket := vars["bucket"]
+ glog.V(4).Infof("read v2: %v", vars)
+
originalPrefix, marker, startAfter, delimiter, _, maxKeys := getListObjectsV2Args(r.URL.Query())
if maxKeys < 0 {
@@ -80,7 +84,7 @@ func (s3a *S3ApiServer) ListObjectsV1Handler(w http.ResponseWriter, r *http.Requ
writeSuccessResponseXML(w, encodeResponse(response))
}
-func (s3a *S3ApiServer) listFilerEntries(bucket, originalPrefix string, maxKeys int, marker string) (response ListBucketResponse, err error) {
+func (s3a *S3ApiServer) listFilerEntries(bucket, originalPrefix string, maxKeys int, marker string) (response *s3.ListObjectsOutput, err error) {
// convert full path prefix into directory name and prefix for entry name
dir, prefix := filepath.Split(originalPrefix)
@@ -96,14 +100,13 @@ func (s3a *S3ApiServer) listFilerEntries(bucket, originalPrefix string, maxKeys
InclusiveStartFrom: false,
}
- glog.V(4).Infof("read directory: %v", request)
resp, err := client.ListEntries(context.Background(), request)
if err != nil {
return fmt.Errorf("list buckets: %v", err)
}
- var contents []ListEntry
- var commonPrefixes []PrefixEntry
+ var contents []*s3.Object
+ var commonPrefixes []*s3.CommonPrefix
var counter int
var lastEntryName string
var isTruncated bool
@@ -115,37 +118,38 @@ func (s3a *S3ApiServer) listFilerEntries(bucket, originalPrefix string, maxKeys
}
lastEntryName = entry.Name
if entry.IsDirectory {
- commonPrefixes = append(commonPrefixes, PrefixEntry{
- Prefix: fmt.Sprintf("%s%s/", dir, entry.Name),
+ commonPrefixes = append(commonPrefixes, &s3.CommonPrefix{
+ Prefix: aws.String(fmt.Sprintf("%s%s/", dir, entry.Name)),
})
} else {
- contents = append(contents, ListEntry{
- Key: fmt.Sprintf("%s%s", dir, entry.Name),
- LastModified: time.Unix(entry.Attributes.Mtime, 0),
- ETag: "", // TODO add etag
- Size: int64(filer2.TotalSize(entry.Chunks)),
- Owner: CanonicalUser{
- ID: fmt.Sprintf("%d", entry.Attributes.Uid),
+ contents = append(contents, &s3.Object{
+ Key: aws.String(fmt.Sprintf("%s%s", dir, entry.Name)),
+ LastModified: aws.Time(time.Unix(entry.Attributes.Mtime, 0)),
+ ETag: aws.String("\"2345sgfwetrewrt\""), // TODO add etag
+ Size: aws.Int64(int64(filer2.TotalSize(entry.Chunks))),
+ Owner: &s3.Owner{
+ ID: aws.String("bcaf161ca5fb16fd081034f"),
+ DisplayName: aws.String("webfile"),
},
- StorageClass: StorageClass("STANDARD"),
+ StorageClass: aws.String("STANDARD"),
})
}
}
- response = ListBucketResponse{
- ListBucketResponse: ListBucketResult{
- Name: bucket,
- Prefix: originalPrefix,
- Marker: marker,
- NextMarker: lastEntryName,
- MaxKeys: maxKeys,
- Delimiter: "/",
- IsTruncated: isTruncated,
- Contents: contents,
- CommonPrefixes: commonPrefixes,
- },
+ response = &s3.ListObjectsOutput{
+ Name: aws.String(bucket),
+ Prefix: aws.String(originalPrefix),
+ Marker: aws.String(marker),
+ NextMarker: aws.String(lastEntryName),
+ MaxKeys: aws.Int64(int64(maxKeys)),
+ Delimiter: aws.String("/"),
+ IsTruncated: aws.Bool(isTruncated),
+ Contents: contents,
+ CommonPrefixes: commonPrefixes,
}
+ glog.V(4).Infof("read directory: %v, found: %v", request, counter)
+
return nil
})