mirror of
https://github.com/ferdzo/fs.git
synced 2026-04-04 20:36:25 +00:00
55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/xml"
|
|
"fs/models"
|
|
"sort"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func ConstructXMLResponseForObjectList(bucket string, objects []*models.ObjectManifest) (string, error) {
|
|
result := models.ListBucketResult{
|
|
Xmlns: "http://s3.amazonaws.com/doc/2006-03-01/",
|
|
Name: bucket,
|
|
Prefix: "",
|
|
KeyCount: len(objects),
|
|
MaxKeys: 1000,
|
|
IsTruncated: false,
|
|
}
|
|
|
|
prefixSet := make(map[string]struct{})
|
|
|
|
for _, object := range objects {
|
|
result.Contents = append(result.Contents, models.Contents{
|
|
Key: object.Key,
|
|
LastModified: time.Unix(object.CreatedAt, 0).UTC().Format("2006-01-02T15:04:05.000Z"),
|
|
ETag: "\"" + object.ETag + "\"",
|
|
Size: object.Size,
|
|
StorageClass: "STANDARD",
|
|
})
|
|
|
|
if strings.Contains(object.Key, "/") {
|
|
parts := strings.SplitN(object.Key, "/", 2)
|
|
prefixSet[parts[0]+"/"] = struct{}{}
|
|
}
|
|
}
|
|
|
|
prefixes := make([]string, 0, len(prefixSet))
|
|
for prefix := range prefixSet {
|
|
prefixes = append(prefixes, prefix)
|
|
}
|
|
sort.Strings(prefixes)
|
|
|
|
for _, prefix := range prefixes {
|
|
result.CommonPrefixes = append(result.CommonPrefixes, models.CommonPrefixes{Prefix: prefix})
|
|
}
|
|
|
|
output, err := xml.MarshalIndent(result, "", " ")
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return xml.Header + string(output), nil
|
|
}
|