diff options
| author | shichanglin5 <shichanglin5@qq.com> | 2022-05-14 10:40:29 +0800 |
|---|---|---|
| committer | shichanglin5 <shichanglin5@qq.com> | 2022-05-14 10:40:29 +0800 |
| commit | 688d55488ccebd2e3a97a0e4570c3bc8bbdceb8f (patch) | |
| tree | 58750aa7b11714d229f6e4c5d5b3f25a90d60697 /weed/s3api/s3api_object_copy_handlers.go | |
| parent | 1166dead006eaf95dc4a542b62e9f3d3e96b1d58 (diff) | |
| download | seaweedfs-688d55488ccebd2e3a97a0e4570c3bc8bbdceb8f.tar.xz seaweedfs-688d55488ccebd2e3a97a0e4570c3bc8bbdceb8f.zip | |
test(s3api_object_copy_handlers_test.go): some unit tests have been added to the processMetadata & processMetadataBytes methods of s3api_object_copy_handlers.go
Diffstat (limited to 'weed/s3api/s3api_object_copy_handlers.go')
| -rw-r--r-- | weed/s3api/s3api_object_copy_handlers.go | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/weed/s3api/s3api_object_copy_handlers.go b/weed/s3api/s3api_object_copy_handlers.go index ff1329ba4..c44ca7ddf 100644 --- a/weed/s3api/s3api_object_copy_handlers.go +++ b/weed/s3api/s3api_object_copy_handlers.go @@ -16,6 +16,11 @@ import ( "github.com/chrislusf/seaweedfs/weed/util" ) +const ( + DirectiveCopy = "COPY" + DirectiveReplace = "REPLACE" +) + func (s3a *S3ApiServer) CopyObjectHandler(w http.ResponseWriter, r *http.Request) { dstBucket, dstObject := xhttp.GetBucketAndObject(r) @@ -31,7 +36,7 @@ func (s3a *S3ApiServer) CopyObjectHandler(w http.ResponseWriter, r *http.Request glog.V(3).Infof("CopyObjectHandler %s %s => %s %s", srcBucket, srcObject, dstBucket, dstObject) - replaceMeta, replaceTagging := replaceDirective(r) + replaceMeta, replaceTagging := replaceDirective(r.Header) if (srcBucket == dstBucket && srcObject == dstObject || cpSrcPath == "") && (replaceMeta || replaceTagging) { fullPath := util.FullPath(fmt.Sprintf("%s/%s%s", s3a.option.BucketsPath, dstBucket, dstObject)) @@ -190,8 +195,8 @@ func (s3a *S3ApiServer) CopyObjectPartHandler(w http.ResponseWriter, r *http.Req } -func replaceDirective(r *http.Request) (replaceMeta, replaceTagging bool) { - return r.Header.Get(headers.AmzUserMetaDirective) == "REPLACE", r.Header.Get(headers.AmzObjectTaggingDirective) == "REPLACE" +func replaceDirective(reqHeader http.Header) (replaceMeta, replaceTagging bool) { + return reqHeader.Get(headers.AmzUserMetaDirective) == DirectiveReplace, reqHeader.Get(headers.AmzObjectTaggingDirective) == DirectiveReplace } func processMetadata(reqHeader, existing http.Header, replaceMeta, replaceTagging bool, getTags func(parentDirectoryPath string, entryName string) (tags map[string]string, err error), dir, name string) (err error) { @@ -214,19 +219,7 @@ func processMetadata(reqHeader, existing http.Header, replaceMeta, replaceTaggin } } - if replaceTagging { - if tags := reqHeader.Get(xhttp.AmzObjectTagging); tags != "" { - for _, v := range strings.Split(tags, "&") { - tag := strings.Split(v, "=") - if len(tag) == 2 { - reqHeader[xhttp.AmzObjectTagging+"-"+tag[0]] = []string{tag[1]} - } else if len(tag) == 1 { - reqHeader[xhttp.AmzObjectTagging+"-"+tag[0]] = []string{} - } - } - } - delete(reqHeader, xhttp.AmzObjectTagging) - } else { + if !replaceTagging { for header, _ := range reqHeader { if strings.HasPrefix(header, xhttp.AmzObjectTagging) { delete(reqHeader, header) @@ -269,12 +262,6 @@ func processMetadataBytes(reqHeader http.Header, existing map[string][]byte, rep } if replaceMeta { - for k, v := range existing { - if strings.HasPrefix(k, xhttp.AmzUserMetaPrefix) { - metadata[k] = v - } - } - } else { for header, values := range reqHeader { if strings.HasPrefix(header, xhttp.AmzUserMetaPrefix) { for _, value := range values { @@ -282,6 +269,12 @@ func processMetadataBytes(reqHeader http.Header, existing map[string][]byte, rep } } } + } else { + for k, v := range existing { + if strings.HasPrefix(k, xhttp.AmzUserMetaPrefix) { + metadata[k] = v + } + } } if replaceTagging { |
