mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
Merge pull request #2390 from kmlebedev/fix_tagging
This commit is contained in:
commit
07dd4873db
|
@ -90,7 +90,7 @@ func (s3a *S3ApiServer) PutObjectTaggingHandler(w http.ResponseWriter, r *http.R
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
w.WriteHeader(http.StatusNoContent)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -202,7 +202,7 @@ var errorCodeResponse = map[ErrorCode]APIError{
|
||||||
HTTPStatusCode: http.StatusBadRequest,
|
HTTPStatusCode: http.StatusBadRequest,
|
||||||
},
|
},
|
||||||
ErrInvalidTag: {
|
ErrInvalidTag: {
|
||||||
Code: "InvalidArgument",
|
Code: "InvalidTag",
|
||||||
Description: "The Tag value you have provided is invalid",
|
Description: "The Tag value you have provided is invalid",
|
||||||
HTTPStatusCode: http.StatusBadRequest,
|
HTTPStatusCode: http.StatusBadRequest,
|
||||||
},
|
},
|
||||||
|
|
|
@ -14,8 +14,9 @@ type TagSet struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Tagging struct {
|
type Tagging struct {
|
||||||
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Tagging"`
|
XMLName xml.Name `xml:"Tagging"`
|
||||||
TagSet TagSet `xml:"TagSet"`
|
TagSet TagSet `xml:"TagSet"`
|
||||||
|
Xmlns string `xml:"xmlns,attr"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Tagging) ToTags() map[string]string {
|
func (t *Tagging) ToTags() map[string]string {
|
||||||
|
@ -27,7 +28,7 @@ func (t *Tagging) ToTags() map[string]string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func FromTags(tags map[string]string) (t *Tagging) {
|
func FromTags(tags map[string]string) (t *Tagging) {
|
||||||
t = &Tagging{}
|
t = &Tagging{Xmlns: "http://s3.amazonaws.com/doc/2006-03-01/"}
|
||||||
for k, v := range tags {
|
for k, v := range tags {
|
||||||
t.TagSet.Tag = append(t.TagSet.Tag, Tag{
|
t.TagSet.Tag = append(t.TagSet.Tag, Tag{
|
||||||
Key: k,
|
Key: k,
|
||||||
|
|
|
@ -32,6 +32,7 @@ func TestXMLUnmarshall(t *testing.T) {
|
||||||
|
|
||||||
func TestXMLMarshall(t *testing.T) {
|
func TestXMLMarshall(t *testing.T) {
|
||||||
tags := &Tagging{
|
tags := &Tagging{
|
||||||
|
Xmlns: "http://s3.amazonaws.com/doc/2006-03-01/",
|
||||||
TagSet: TagSet{
|
TagSet: TagSet{
|
||||||
[]Tag{
|
[]Tag{
|
||||||
{
|
{
|
||||||
|
|
|
@ -113,17 +113,15 @@ func (fs *FilerServer) GetOrHeadHandler(w http.ResponseWriter, r *http.Request)
|
||||||
w.Header().Set("Access-Control-Expose-Headers", strings.Join(seaweedHeaders, ","))
|
w.Header().Set("Access-Control-Expose-Headers", strings.Join(seaweedHeaders, ","))
|
||||||
|
|
||||||
//set tag count
|
//set tag count
|
||||||
if r.Method == "GET" {
|
tagCount := 0
|
||||||
tagCount := 0
|
for k := range entry.Extended {
|
||||||
for k := range entry.Extended {
|
if strings.HasPrefix(k, xhttp.AmzObjectTagging+"-") {
|
||||||
if strings.HasPrefix(k, xhttp.AmzObjectTagging+"-") {
|
tagCount++
|
||||||
tagCount++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if tagCount > 0 {
|
|
||||||
w.Header().Set(xhttp.AmzTagCount, strconv.Itoa(tagCount))
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if tagCount > 0 {
|
||||||
|
w.Header().Set(xhttp.AmzTagCount, strconv.Itoa(tagCount))
|
||||||
|
}
|
||||||
|
|
||||||
if inm := r.Header.Get("If-None-Match"); inm == "\""+etag+"\"" {
|
if inm := r.Header.Get("If-None-Match"); inm == "\""+etag+"\"" {
|
||||||
w.WriteHeader(http.StatusNotModified)
|
w.WriteHeader(http.StatusNotModified)
|
||||||
|
|
|
@ -327,6 +327,8 @@ func SaveAmzMetaData(r *http.Request, existing map[string][]byte, isReplace bool
|
||||||
tag := strings.Split(v, "=")
|
tag := strings.Split(v, "=")
|
||||||
if len(tag) == 2 {
|
if len(tag) == 2 {
|
||||||
metadata[xhttp.AmzObjectTagging+"-"+tag[0]] = []byte(tag[1])
|
metadata[xhttp.AmzObjectTagging+"-"+tag[0]] = []byte(tag[1])
|
||||||
|
} else if len(tag) == 1 {
|
||||||
|
metadata[xhttp.AmzObjectTagging+"-"+tag[0]] = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue