aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2020-10-29 08:32:27 -0700
committerGitHub <noreply@github.com>2020-10-29 08:32:27 -0700
commit6f8b426f4fcf3933258f29afb6518ddf3e74a9d3 (patch)
tree1e6d1b5bbaa1769389dda61ed530250dc8a63256
parentc6d9974fe76be3004161d9ccf4328cebc5a25287 (diff)
parent22a9ea05129d8c4776187d667f9e31b03ddbb2e0 (diff)
downloadseaweedfs-6f8b426f4fcf3933258f29afb6518ddf3e74a9d3.tar.xz
seaweedfs-6f8b426f4fcf3933258f29afb6518ddf3e74a9d3.zip
Merge pull request #1578 from taozix/master
S3 bucket list, response with uploaded storageclass.
-rw-r--r--weed/s3api/filer_util_tags.go3
-rw-r--r--weed/s3api/http/header.go30
-rw-r--r--weed/s3api/s3api_objects_list_handlers.go9
-rw-r--r--weed/server/filer_server_handlers_read.go5
-rw-r--r--weed/server/filer_server_handlers_write_autochunk.go16
5 files changed, 48 insertions, 15 deletions
diff --git a/weed/s3api/filer_util_tags.go b/weed/s3api/filer_util_tags.go
index 3d4da7825..75d3b37d0 100644
--- a/weed/s3api/filer_util_tags.go
+++ b/weed/s3api/filer_util_tags.go
@@ -4,10 +4,11 @@ import (
"strings"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
+ xhttp "github.com/chrislusf/seaweedfs/weed/s3api/http"
)
const (
- S3TAG_PREFIX = "s3-"
+ S3TAG_PREFIX = xhttp.AmzObjectTagging + "-"
)
func (s3a *S3ApiServer) getTags(parentDirectoryPath string, entryName string) (tags map[string]string, err error) {
diff --git a/weed/s3api/http/header.go b/weed/s3api/http/header.go
new file mode 100644
index 000000000..2802b560f
--- /dev/null
+++ b/weed/s3api/http/header.go
@@ -0,0 +1,30 @@
+/*
+ * MinIO Cloud Storage, (C) 2019 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 http
+
+// Standard S3 HTTP request constants
+const (
+ // S3 storage class
+ AmzStorageClass = "x-amz-storage-class"
+
+ // S3 user-defined metadata
+ AmzUserMetaPrefix = "X-Amz-Meta-"
+
+ // S3 object tagging
+ AmzObjectTagging = "X-Amz-Tagging"
+ AmzTagCount = "x-amz-tagging-count"
+)
diff --git a/weed/s3api/s3api_objects_list_handlers.go b/weed/s3api/s3api_objects_list_handlers.go
index 23406d6df..5d63f1039 100644
--- a/weed/s3api/s3api_objects_list_handlers.go
+++ b/weed/s3api/s3api_objects_list_handlers.go
@@ -4,7 +4,6 @@ import (
"context"
"encoding/xml"
"fmt"
- "github.com/chrislusf/seaweedfs/weed/s3api/s3err"
"io"
"net/http"
"net/url"
@@ -15,6 +14,8 @@ import (
"github.com/chrislusf/seaweedfs/weed/filer"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
+ xhttp "github.com/chrislusf/seaweedfs/weed/s3api/http"
+ "github.com/chrislusf/seaweedfs/weed/s3api/s3err"
)
type ListBucketResultV2 struct {
@@ -137,6 +138,10 @@ func (s3a *S3ApiServer) listFilerEntries(bucket string, originalPrefix string, m
})
}
} else {
+ storageClass := "STANDARD"
+ if v, ok := entry.Extended[xhttp.AmzStorageClass]; ok {
+ storageClass = string(v)
+ }
contents = append(contents, ListEntry{
Key: fmt.Sprintf("%s/%s", dir, entry.Name)[len(bucketPrefix):],
LastModified: time.Unix(entry.Attributes.Mtime, 0).UTC(),
@@ -146,7 +151,7 @@ func (s3a *S3ApiServer) listFilerEntries(bucket string, originalPrefix string, m
ID: fmt.Sprintf("%x", entry.Attributes.Uid),
DisplayName: entry.Attributes.UserName,
},
- StorageClass: "STANDARD",
+ StorageClass: StorageClass(storageClass),
})
}
})
diff --git a/weed/server/filer_server_handlers_read.go b/weed/server/filer_server_handlers_read.go
index 16edb6167..7b08e1686 100644
--- a/weed/server/filer_server_handlers_read.go
+++ b/weed/server/filer_server_handlers_read.go
@@ -15,6 +15,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/images"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
+ xhttp "github.com/chrislusf/seaweedfs/weed/s3api/http"
"github.com/chrislusf/seaweedfs/weed/stats"
"github.com/chrislusf/seaweedfs/weed/util"
)
@@ -97,12 +98,12 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request,
if r.Method == "GET" {
tagCount := 0
for k, _ := range entry.Extended {
- if strings.HasPrefix(k, "X-Amz-Tagging-") {
+ if strings.HasPrefix(k, xhttp.AmzObjectTagging+"-") {
tagCount++
}
}
if tagCount > 0 {
- w.Header().Set("x-amz-tag-count", strconv.Itoa(tagCount))
+ w.Header().Set(xhttp.AmzTagCount, strconv.Itoa(tagCount))
}
}
diff --git a/weed/server/filer_server_handlers_write_autochunk.go b/weed/server/filer_server_handlers_write_autochunk.go
index d996c6208..d308dafa2 100644
--- a/weed/server/filer_server_handlers_write_autochunk.go
+++ b/weed/server/filer_server_handlers_write_autochunk.go
@@ -18,6 +18,7 @@ import (
"github.com/chrislusf/seaweedfs/weed/glog"
"github.com/chrislusf/seaweedfs/weed/operation"
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
+ xhttp "github.com/chrislusf/seaweedfs/weed/s3api/http"
"github.com/chrislusf/seaweedfs/weed/security"
"github.com/chrislusf/seaweedfs/weed/stats"
"github.com/chrislusf/seaweedfs/weed/util"
@@ -312,31 +313,26 @@ func (fs *FilerServer) mkdir(ctx context.Context, w http.ResponseWriter, r *http
}
func (fs *FilerServer) saveAmzMetaData(r *http.Request, entry *filer.Entry) {
- var (
- storageClass = "X-Amz-Storage-Class"
- objectTagging = "X-Amz-Tagging"
- userMetaPrefix = "X-Amz-Meta-"
- )
if entry.Extended == nil {
entry.Extended = make(map[string][]byte)
}
- if sc := r.Header.Get(storageClass); sc != "" {
- entry.Extended[storageClass] = []byte(sc)
+ if sc := r.Header.Get(xhttp.AmzStorageClass); sc != "" {
+ entry.Extended[xhttp.AmzStorageClass] = []byte(sc)
}
- if tags := r.Header.Get(objectTagging); tags != "" {
+ if tags := r.Header.Get(xhttp.AmzObjectTagging); tags != "" {
for _, v := range strings.Split(tags, "&") {
tag := strings.Split(v, "=")
if len(tag) == 2 {
- entry.Extended[objectTagging+"-"+tag[0]] = []byte(tag[1])
+ entry.Extended[xhttp.AmzObjectTagging+"-"+tag[0]] = []byte(tag[1])
}
}
}
for header, values := range r.Header {
- if strings.HasPrefix(header, userMetaPrefix) {
+ if strings.HasPrefix(header, xhttp.AmzUserMetaPrefix) {
for _, value := range values {
entry.Extended[header] = []byte(value)
}