+6
-4
responses.go
+6
-4
responses.go
···
29
29
30
30
// https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html
31
31
type ListBucketResult struct {
32
-
XMLName xml.Name `xml:"ListBucketResult"`
33
-
Name string `xml:"Name"`
34
-
Prefix string `xml:"Prefix"`
35
-
Contents []Object `xml:"Contents"`
32
+
XMLName xml.Name `xml:"ListBucketResult"`
33
+
Name string `xml:"Name"`
34
+
Prefix string `xml:"Prefix"`
35
+
KeyCount int64 `xml:"KeyCount"`
36
+
IsTruncated bool `xml:"IsTruncated"`
37
+
Contents []Object `xml:"Contents"`
36
38
}
+11
-8
server.go
+11
-8
server.go
···
53
53
path := filepath.Join(bucketName, subpath)
54
54
files, err := fs.ReadDir(root.FS(), path)
55
55
if err != nil {
56
-
return ListBucketResult{}, err
56
+
if errors.Is(err, fs.ErrNotExist) {
57
+
return ListBucketResult{KeyCount: 0, IsTruncated: false, Prefix: prefix}, nil
58
+
} else {
59
+
return ListBucketResult{}, err
60
+
}
57
61
}
58
62
59
63
var objects []Object
···
77
81
})
78
82
}
79
83
}
84
+
80
85
result := ListBucketResult{
81
-
Contents: objects,
86
+
KeyCount: int64(len(objects)),
87
+
IsTruncated: false,
88
+
Prefix: prefix,
89
+
Contents: objects,
82
90
}
83
91
return result, nil
84
92
}
···
145
153
146
154
result, err := listObjects(root, bucketName, r.URL.Query().Get("prefix"))
147
155
if err != nil {
148
-
// FIXME: I think this should always return 200 anyways
149
-
if errors.Is(err, fs.ErrNotExist) {
150
-
http.Error(w, err.Error(), http.StatusNotFound)
151
-
} else {
152
-
http.Error(w, err.Error(), http.StatusInternalServerError)
153
-
}
156
+
http.Error(w, err.Error(), http.StatusInternalServerError)
154
157
return
155
158
}
156
159