mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
adjust s3 header file.
This commit is contained in:
parent
b917be7955
commit
22a9ea0512
|
@ -4,10 +4,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
||||||
|
xhttp "github.com/chrislusf/seaweedfs/weed/s3api/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
S3TAG_PREFIX = "s3-"
|
S3TAG_PREFIX = xhttp.AmzObjectTagging + "-"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s3a *S3ApiServer) getTags(parentDirectoryPath string, entryName string) (tags map[string]string, err error) {
|
func (s3a *S3ApiServer) getTags(parentDirectoryPath string, entryName string) (tags map[string]string, err error) {
|
||||||
|
|
30
weed/s3api/http/header.go
Normal file
30
weed/s3api/http/header.go
Normal file
|
@ -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"
|
||||||
|
)
|
|
@ -12,12 +12,10 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/util"
|
|
||||||
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/s3api/s3err"
|
|
||||||
|
|
||||||
"github.com/chrislusf/seaweedfs/weed/filer"
|
"github.com/chrislusf/seaweedfs/weed/filer"
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
"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 {
|
type ListBucketResultV2 struct {
|
||||||
|
@ -141,7 +139,7 @@ func (s3a *S3ApiServer) listFilerEntries(bucket string, originalPrefix string, m
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
storageClass := "STANDARD"
|
storageClass := "STANDARD"
|
||||||
if v, ok := entry.Extended[util.AmzStorageClass]; ok {
|
if v, ok := entry.Extended[xhttp.AmzStorageClass]; ok {
|
||||||
storageClass = string(v)
|
storageClass = string(v)
|
||||||
}
|
}
|
||||||
contents = append(contents, ListEntry{
|
contents = append(contents, ListEntry{
|
||||||
|
|
|
@ -15,6 +15,7 @@ import (
|
||||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||||
"github.com/chrislusf/seaweedfs/weed/images"
|
"github.com/chrislusf/seaweedfs/weed/images"
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
"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/stats"
|
||||||
"github.com/chrislusf/seaweedfs/weed/util"
|
"github.com/chrislusf/seaweedfs/weed/util"
|
||||||
)
|
)
|
||||||
|
@ -97,12 +98,12 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request,
|
||||||
if r.Method == "GET" {
|
if r.Method == "GET" {
|
||||||
tagCount := 0
|
tagCount := 0
|
||||||
for k, _ := range entry.Extended {
|
for k, _ := range entry.Extended {
|
||||||
if strings.HasPrefix(k, util.AmzObjectTagging+"-") {
|
if strings.HasPrefix(k, xhttp.AmzObjectTagging+"-") {
|
||||||
tagCount++
|
tagCount++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if tagCount > 0 {
|
if tagCount > 0 {
|
||||||
w.Header().Set(util.AmzTagCount, strconv.Itoa(tagCount))
|
w.Header().Set(xhttp.AmzTagCount, strconv.Itoa(tagCount))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ import (
|
||||||
"github.com/chrislusf/seaweedfs/weed/glog"
|
"github.com/chrislusf/seaweedfs/weed/glog"
|
||||||
"github.com/chrislusf/seaweedfs/weed/operation"
|
"github.com/chrislusf/seaweedfs/weed/operation"
|
||||||
"github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
|
"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/security"
|
||||||
"github.com/chrislusf/seaweedfs/weed/stats"
|
"github.com/chrislusf/seaweedfs/weed/stats"
|
||||||
"github.com/chrislusf/seaweedfs/weed/util"
|
"github.com/chrislusf/seaweedfs/weed/util"
|
||||||
|
@ -317,21 +318,21 @@ func (fs *FilerServer) saveAmzMetaData(r *http.Request, entry *filer.Entry) {
|
||||||
entry.Extended = make(map[string][]byte)
|
entry.Extended = make(map[string][]byte)
|
||||||
}
|
}
|
||||||
|
|
||||||
if sc := r.Header.Get(util.AmzStorageClass); sc != "" {
|
if sc := r.Header.Get(xhttp.AmzStorageClass); sc != "" {
|
||||||
entry.Extended[util.AmzStorageClass] = []byte(sc)
|
entry.Extended[xhttp.AmzStorageClass] = []byte(sc)
|
||||||
}
|
}
|
||||||
|
|
||||||
if tags := r.Header.Get(util.AmzObjectTagging); tags != "" {
|
if tags := r.Header.Get(xhttp.AmzObjectTagging); tags != "" {
|
||||||
for _, v := range strings.Split(tags, "&") {
|
for _, v := range strings.Split(tags, "&") {
|
||||||
tag := strings.Split(v, "=")
|
tag := strings.Split(v, "=")
|
||||||
if len(tag) == 2 {
|
if len(tag) == 2 {
|
||||||
entry.Extended[util.AmzObjectTagging+"-"+tag[0]] = []byte(tag[1])
|
entry.Extended[xhttp.AmzObjectTagging+"-"+tag[0]] = []byte(tag[1])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for header, values := range r.Header {
|
for header, values := range r.Header {
|
||||||
if strings.HasPrefix(header, util.AmzUserMetaPrefix) {
|
if strings.HasPrefix(header, xhttp.AmzUserMetaPrefix) {
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
entry.Extended[header] = []byte(value)
|
entry.Extended[header] = []byte(value)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,141 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 util
|
|
||||||
|
|
||||||
// Standard S3 HTTP response constants
|
|
||||||
const (
|
|
||||||
LastModified = "Last-Modified"
|
|
||||||
Date = "Date"
|
|
||||||
ETag = "ETag"
|
|
||||||
ContentType = "Content-Type"
|
|
||||||
ContentMD5 = "Content-Md5"
|
|
||||||
ContentEncoding = "Content-Encoding"
|
|
||||||
Expires = "Expires"
|
|
||||||
ContentLength = "Content-Length"
|
|
||||||
ContentLanguage = "Content-Language"
|
|
||||||
ContentRange = "Content-Range"
|
|
||||||
Connection = "Connection"
|
|
||||||
AcceptRanges = "Accept-Ranges"
|
|
||||||
AmzBucketRegion = "X-Amz-Bucket-Region"
|
|
||||||
ServerInfo = "Server"
|
|
||||||
RetryAfter = "Retry-After"
|
|
||||||
Location = "Location"
|
|
||||||
CacheControl = "Cache-Control"
|
|
||||||
ContentDisposition = "Content-Disposition"
|
|
||||||
Authorization = "Authorization"
|
|
||||||
Action = "Action"
|
|
||||||
Range = "Range"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Non standard S3 HTTP response constants
|
|
||||||
const (
|
|
||||||
XCache = "X-Cache"
|
|
||||||
XCacheLookup = "X-Cache-Lookup"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Standard S3 HTTP request constants
|
|
||||||
const (
|
|
||||||
IfModifiedSince = "If-Modified-Since"
|
|
||||||
IfUnmodifiedSince = "If-Unmodified-Since"
|
|
||||||
IfMatch = "If-Match"
|
|
||||||
IfNoneMatch = "If-None-Match"
|
|
||||||
|
|
||||||
// S3 storage class
|
|
||||||
AmzStorageClass = "x-amz-storage-class"
|
|
||||||
|
|
||||||
// S3 user-defined metadata
|
|
||||||
AmzUserMetaPrefix = "X-Amz-Meta-"
|
|
||||||
|
|
||||||
// S3 object version ID
|
|
||||||
AmzVersionID = "x-amz-version-id"
|
|
||||||
AmzDeleteMarker = "x-amz-delete-marker"
|
|
||||||
|
|
||||||
// S3 object tagging
|
|
||||||
AmzObjectTagging = "X-Amz-Tagging"
|
|
||||||
AmzTagCount = "x-amz-tagging-count"
|
|
||||||
AmzTagDirective = "X-Amz-Tagging-Directive"
|
|
||||||
|
|
||||||
// S3 extensions
|
|
||||||
AmzCopySourceIfModifiedSince = "x-amz-copy-source-if-modified-since"
|
|
||||||
AmzCopySourceIfUnmodifiedSince = "x-amz-copy-source-if-unmodified-since"
|
|
||||||
|
|
||||||
AmzCopySourceIfNoneMatch = "x-amz-copy-source-if-none-match"
|
|
||||||
AmzCopySourceIfMatch = "x-amz-copy-source-if-match"
|
|
||||||
|
|
||||||
AmzCopySource = "X-Amz-Copy-Source"
|
|
||||||
AmzCopySourceVersionID = "X-Amz-Copy-Source-Version-Id"
|
|
||||||
AmzCopySourceRange = "X-Amz-Copy-Source-Range"
|
|
||||||
AmzMetadataDirective = "X-Amz-Metadata-Directive"
|
|
||||||
AmzObjectLockMode = "X-Amz-Object-Lock-Mode"
|
|
||||||
AmzObjectLockRetainUntilDate = "X-Amz-Object-Lock-Retain-Until-Date"
|
|
||||||
AmzObjectLockLegalHold = "X-Amz-Object-Lock-Legal-Hold"
|
|
||||||
AmzObjectLockBypassGovernance = "X-Amz-Bypass-Governance-Retention"
|
|
||||||
AmzBucketReplicationStatus = "X-Amz-Replication-Status"
|
|
||||||
// Multipart parts count
|
|
||||||
AmzMpPartsCount = "x-amz-mp-parts-count"
|
|
||||||
|
|
||||||
// Object date/time of expiration
|
|
||||||
AmzExpiration = "x-amz-expiration"
|
|
||||||
|
|
||||||
// Dummy putBucketACL
|
|
||||||
AmzACL = "x-amz-acl"
|
|
||||||
|
|
||||||
// Signature V4 related contants.
|
|
||||||
AmzContentSha256 = "X-Amz-Content-Sha256"
|
|
||||||
AmzDate = "X-Amz-Date"
|
|
||||||
AmzAlgorithm = "X-Amz-Algorithm"
|
|
||||||
AmzExpires = "X-Amz-Expires"
|
|
||||||
AmzSignedHeaders = "X-Amz-SignedHeaders"
|
|
||||||
AmzSignature = "X-Amz-Signature"
|
|
||||||
AmzCredential = "X-Amz-Credential"
|
|
||||||
AmzSecurityToken = "X-Amz-Security-Token"
|
|
||||||
AmzDecodedContentLength = "X-Amz-Decoded-Content-Length"
|
|
||||||
|
|
||||||
AmzMetaUnencryptedContentLength = "X-Amz-Meta-X-Amz-Unencrypted-Content-Length"
|
|
||||||
AmzMetaUnencryptedContentMD5 = "X-Amz-Meta-X-Amz-Unencrypted-Content-Md5"
|
|
||||||
|
|
||||||
// Signature v2 related constants
|
|
||||||
AmzSignatureV2 = "Signature"
|
|
||||||
AmzAccessKeyID = "AWSAccessKeyId"
|
|
||||||
|
|
||||||
// Response request id.
|
|
||||||
AmzRequestID = "x-amz-request-id"
|
|
||||||
|
|
||||||
// Deployment id.
|
|
||||||
MinioDeploymentID = "x-minio-deployment-id"
|
|
||||||
|
|
||||||
// Server-Status
|
|
||||||
MinIOServerStatus = "x-minio-server-status"
|
|
||||||
|
|
||||||
// Delete special flag to force delete a bucket
|
|
||||||
MinIOForceDelete = "x-minio-force-delete"
|
|
||||||
|
|
||||||
// Header indicates if the mtime should be preserved by client
|
|
||||||
MinIOSourceMTime = "x-minio-source-mtime"
|
|
||||||
|
|
||||||
// Header indicates if the etag should be preserved by client
|
|
||||||
MinIOSourceETag = "x-minio-source-etag"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Common http query params S3 API
|
|
||||||
const (
|
|
||||||
VersionID = "versionId"
|
|
||||||
|
|
||||||
PartNumber = "partNumber"
|
|
||||||
|
|
||||||
UploadID = "uploadId"
|
|
||||||
)
|
|
Loading…
Reference in a new issue