[#196] Add GetObjectTagging

Signed-off-by: Denis Kirillov <denis@nspcc.ru>
This commit is contained in:
Denis Kirillov 2021-08-17 14:23:01 +03:00 committed by Alex Vanin
parent 8b5ebe2ec2
commit 4a2575fbf3
7 changed files with 92 additions and 8 deletions

View file

@ -65,7 +65,7 @@ func fetchRangeHeader(headers http.Header, fullSize uint64) (*layer.RangeParams,
return &layer.RangeParams{Start: start, End: end}, nil
}
func writeHeaders(h http.Header, info *layer.ObjectInfo) {
func writeHeaders(h http.Header, info *layer.ObjectInfo, tagSetLength int) {
if len(info.ContentType) > 0 {
h.Set(api.ContentType, info.ContentType)
}
@ -73,6 +73,7 @@ func writeHeaders(h http.Header, info *layer.ObjectInfo) {
h.Set(api.ContentLength, strconv.FormatInt(info.Size, 10))
h.Set(api.ETag, info.HashSum)
h.Set(api.AmzVersionID, info.ID().String())
h.Set(api.AmzTaggingCount, strconv.Itoa(tagSetLength))
for key, val := range info.Headers {
h[api.MetadataPrefix+key] = []string{val}
@ -119,7 +120,14 @@ func (h *handler) GetObjectHandler(w http.ResponseWriter, r *http.Request) {
h.logAndSendError(w, "could not parse range header", reqInfo, err)
return
}
writeHeaders(w.Header(), info)
tagSet, err := h.obj.GetObjectTagging(r.Context(), info)
if err != nil && !errors.IsS3Error(err, errors.ErrNoSuchKey) {
h.logAndSendError(w, "could not get object tag set", reqInfo, err)
return
}
writeHeaders(w.Header(), info, len(tagSet))
if params != nil {
writeRangeHeaders(w, params, info.Size)
}