forked from TrueCloudLab/frostfs-s3-gw
Merge pull request #148 from masterSplinter01/bugfix/131-add-metadata
Fix metadata
This commit is contained in:
commit
1f656aac23
5 changed files with 17 additions and 6 deletions
|
@ -69,7 +69,7 @@ func writeHeaders(h http.Header, info *layer.ObjectInfo) {
|
||||||
h.Set(api.ETag, info.HashSum)
|
h.Set(api.ETag, info.HashSum)
|
||||||
|
|
||||||
for key, val := range info.Headers {
|
for key, val := range info.Headers {
|
||||||
h.Set("X-"+key, val)
|
h.Set(api.MetadataPrefix+key, val)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -202,7 +202,6 @@ func encodeV1(arg *listObjectsArgs, list *layer.ListObjectsInfo) *ListObjectsRes
|
||||||
res.Contents = append(res.Contents, Object{
|
res.Contents = append(res.Contents, Object{
|
||||||
Key: obj.Name,
|
Key: obj.Name,
|
||||||
Size: obj.Size,
|
Size: obj.Size,
|
||||||
UserMetadata: obj.Headers,
|
|
||||||
LastModified: obj.Created.Format(time.RFC3339),
|
LastModified: obj.Created.Format(time.RFC3339),
|
||||||
|
|
||||||
Owner: Owner{
|
Owner: Owner{
|
||||||
|
@ -265,7 +264,6 @@ func encodeV2(arg *listObjectsArgs, list *layer.ListObjectsInfo) *ListObjectsV2R
|
||||||
res.Contents = append(res.Contents, Object{
|
res.Contents = append(res.Contents, Object{
|
||||||
Key: obj.Name,
|
Key: obj.Name,
|
||||||
Size: obj.Size,
|
Size: obj.Size,
|
||||||
UserMetadata: obj.Headers,
|
|
||||||
LastModified: obj.Created.Format(time.RFC3339),
|
LastModified: obj.Created.Format(time.RFC3339),
|
||||||
|
|
||||||
Owner: Owner{
|
Owner: Owner{
|
||||||
|
|
|
@ -47,11 +47,14 @@ func (h *handler) PutObjectHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
metadata := parseMetadata(r)
|
||||||
|
|
||||||
params := &layer.PutObjectParams{
|
params := &layer.PutObjectParams{
|
||||||
Bucket: bkt,
|
Bucket: bkt,
|
||||||
Object: obj,
|
Object: obj,
|
||||||
Reader: r.Body,
|
Reader: r.Body,
|
||||||
Size: r.ContentLength,
|
Size: r.ContentLength,
|
||||||
|
Header: metadata,
|
||||||
}
|
}
|
||||||
|
|
||||||
if info, err = h.obj.PutObject(r.Context(), params); err != nil {
|
if info, err = h.obj.PutObject(r.Context(), params); err != nil {
|
||||||
|
@ -74,6 +77,17 @@ func (h *handler) PutObjectHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
api.WriteSuccessResponseHeadersOnly(w)
|
api.WriteSuccessResponseHeadersOnly(w)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseMetadata(r *http.Request) map[string]string {
|
||||||
|
res := make(map[string]string)
|
||||||
|
for k, v := range r.Header {
|
||||||
|
if strings.HasPrefix(k, api.MetadataPrefix) {
|
||||||
|
key := strings.TrimPrefix(k, api.MetadataPrefix)
|
||||||
|
res[key] = v[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
func (h *handler) CreateBucketHandler(w http.ResponseWriter, r *http.Request) {
|
func (h *handler) CreateBucketHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
|
|
|
@ -104,9 +104,6 @@ type Object struct {
|
||||||
|
|
||||||
// The class of storage used to store the object.
|
// The class of storage used to store the object.
|
||||||
StorageClass string `xml:"StorageClass,omitempty"`
|
StorageClass string `xml:"StorageClass,omitempty"`
|
||||||
|
|
||||||
// UserMetadata user-defined metadata
|
|
||||||
UserMetadata StringMap `xml:"UserMetadata,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ObjectVersionResponse container for object version in the response of ListBucketObjectVersionsHandler.
|
// ObjectVersionResponse container for object version in the response of ListBucketObjectVersionsHandler.
|
||||||
|
|
|
@ -2,6 +2,8 @@ package api
|
||||||
|
|
||||||
// Standard S3 HTTP request/response constants.
|
// Standard S3 HTTP request/response constants.
|
||||||
const (
|
const (
|
||||||
|
MetadataPrefix = "X-Amz-Meta-"
|
||||||
|
|
||||||
LastModified = "Last-Modified"
|
LastModified = "Last-Modified"
|
||||||
Date = "Date"
|
Date = "Date"
|
||||||
ETag = "ETag"
|
ETag = "ETag"
|
||||||
|
|
Loading…
Reference in a new issue