XL/fs: Return saved content-type during GetObject

Fixes #1674
master
Bala.FA 8 years ago committed by Harshavardhana
parent 2f05aacbf2
commit 13e4618309
  1. 42
      xl-objects.go

@ -231,7 +231,9 @@ func getMultipartObjectInfo(storage StorageAPI, bucket, object string) (info Mul
} }
// Return ObjectInfo. // Return ObjectInfo.
func (xl xlObjects) getObjectInfo(bucket, object string) (ObjectInfo, error) { func (xl xlObjects) getObjectInfo(bucket, object string) (objInfo ObjectInfo, err error) {
objInfo.Bucket = bucket
objInfo.Name = object
// First see if the object was a simple-PUT upload. // First see if the object was a simple-PUT upload.
fi, err := xl.storage.StatFile(bucket, object) fi, err := xl.storage.StatFile(bucket, object)
if err != nil { if err != nil {
@ -244,26 +246,38 @@ func (xl xlObjects) getObjectInfo(bucket, object string) (ObjectInfo, error) {
if err != nil { if err != nil {
return ObjectInfo{}, err return ObjectInfo{}, err
} }
fi.Size = info.Size objInfo.Size = info.Size
fi.ModTime = info.ModTime objInfo.ModTime = info.ModTime
fi.MD5Sum = info.MD5Sum objInfo.MD5Sum = info.MD5Sum
objInfo.ContentType = info.ContentType
} else {
metadata := make(map[string]string)
offset := int64(0) // To read entire content
r, err := xl.storage.ReadFile(bucket, pathJoin(object, "meta.json"), offset)
if err != nil {
return ObjectInfo{}, toObjectErr(err, bucket, object)
}
decoder := json.NewDecoder(r)
if err = decoder.Decode(&metadata); err != nil {
return ObjectInfo{}, toObjectErr(err, bucket, object)
} }
contentType := "application/octet-stream" contentType := metadata["content-type"]
if len(contentType) == 0 {
contentType = "application/octet-stream"
if objectExt := filepath.Ext(object); objectExt != "" { if objectExt := filepath.Ext(object); objectExt != "" {
content, ok := mimedb.DB[strings.ToLower(strings.TrimPrefix(objectExt, "."))] content, ok := mimedb.DB[strings.ToLower(strings.TrimPrefix(objectExt, "."))]
if ok { if ok {
contentType = content.ContentType contentType = content.ContentType
} }
} }
return ObjectInfo{ }
Bucket: bucket, objInfo.Size = fi.Size
Name: object, objInfo.IsDir = fi.Mode.IsDir()
ModTime: fi.ModTime, objInfo.ModTime = fi.ModTime
Size: fi.Size, objInfo.MD5Sum = metadata["md5Sum"]
IsDir: fi.Mode.IsDir(), objInfo.ContentType = contentType
ContentType: contentType, }
MD5Sum: fi.MD5Sum, return objInfo, nil
}, nil
} }
// GetObjectInfo - get object info. // GetObjectInfo - get object info.

Loading…
Cancel
Save