mirror of
https://github.com/minio/minio.git
synced 2025-11-20 09:56:07 -05:00
Add PutBucket and ListBuckets service
This commit is contained in:
@@ -20,14 +20,24 @@ import (
|
||||
"encoding/xml"
|
||||
)
|
||||
|
||||
type ListResponse struct {
|
||||
XMLName xml.Name `xml:"ListBucketResult"`
|
||||
Name string `xml:"Name"`
|
||||
storagerefix string
|
||||
Marker string
|
||||
MaxKeys int
|
||||
IsTruncated bool
|
||||
Contents []Content `xml:"Contents",innerxml`
|
||||
type ObjectListResponse struct {
|
||||
XMLName xml.Name `xml:"ListBucketResult"`
|
||||
Name string `xml:"Name"`
|
||||
Marker string
|
||||
MaxKeys int
|
||||
IsTruncated bool
|
||||
Contents []Content `xml:"Contents",innerxml`
|
||||
}
|
||||
|
||||
type BucketListResponse struct {
|
||||
XMLName xml.Name `xml:"ListAllMyBucketsResult"`
|
||||
Owner Owner
|
||||
Buckets []Bucket `xml:"Buckets",innerxml`
|
||||
}
|
||||
|
||||
type Bucket struct {
|
||||
Name string
|
||||
CreationDate string
|
||||
}
|
||||
|
||||
type Content struct {
|
||||
|
||||
@@ -42,7 +42,7 @@ func HttpHandler(storage *mstorage.Storage) http.Handler {
|
||||
storage: storage,
|
||||
}
|
||||
mux.HandleFunc("/", api.listBucketsHandler).Methods("GET")
|
||||
mux.HandleFunc("/{bucket}", api.listObjectsHandler).Methods("GET")
|
||||
mux.HandleFunc("/{bucket}", api.putBucketHandler).Methods("PUT")
|
||||
mux.HandleFunc("/{bucket}/", api.listObjectsHandler).Methods("GET")
|
||||
mux.HandleFunc("/{bucket}/{object:.*}", api.getObjectHandler).Methods("GET")
|
||||
mux.HandleFunc("/{bucket}/{object:.*}", api.putObjectHandler).Methods("PUT")
|
||||
@@ -74,7 +74,31 @@ func (server *minioApi) getObjectHandler(w http.ResponseWriter, req *http.Reques
|
||||
}
|
||||
|
||||
func (server *minioApi) listBucketsHandler(w http.ResponseWriter, req *http.Request) {
|
||||
w.Write([]byte("/"))
|
||||
vars := mux.Vars(req)
|
||||
prefix, ok := vars["prefix"]
|
||||
if ok == false {
|
||||
prefix = ""
|
||||
}
|
||||
contentType := "xml"
|
||||
if req.Header["Accept"][0] == "application/json" {
|
||||
contentType = "json"
|
||||
}
|
||||
buckets := server.storage.ListBuckets(prefix)
|
||||
response := generateBucketsListResult(buckets)
|
||||
|
||||
var bytesBuffer bytes.Buffer
|
||||
var encoder encoder
|
||||
if contentType == "json" {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
encoder = json.NewEncoder(&bytesBuffer)
|
||||
} else {
|
||||
w.Header().Set("Content-Type", "application/xml")
|
||||
encoder = xml.NewEncoder(&bytesBuffer)
|
||||
}
|
||||
encoder.Encode(response)
|
||||
|
||||
w.Write(bytesBuffer.Bytes())
|
||||
|
||||
}
|
||||
|
||||
func (server *minioApi) listObjectsHandler(w http.ResponseWriter, req *http.Request) {
|
||||
@@ -102,7 +126,7 @@ func (server *minioApi) listObjectsHandler(w http.ResponseWriter, req *http.Requ
|
||||
}
|
||||
|
||||
objects := server.storage.ListObjects(bucket, prefix, 1000)
|
||||
response := generateListResult(objects)
|
||||
response := generateObjectsListResult(bucket, objects)
|
||||
|
||||
var bytesBuffer bytes.Buffer
|
||||
var encoder encoder
|
||||
@@ -130,7 +154,41 @@ func (server *minioApi) putObjectHandler(w http.ResponseWriter, req *http.Reques
|
||||
}
|
||||
}
|
||||
|
||||
func generateListResult(objects []mstorage.ObjectMetadata) ListResponse {
|
||||
func (server *minioApi) putBucketHandler(w http.ResponseWriter, req *http.Request) {
|
||||
vars := mux.Vars(req)
|
||||
bucket := vars["bucket"]
|
||||
err := server.storage.StoreBucket(bucket)
|
||||
if err != nil {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
w.Write([]byte(err.Error()))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func generateBucketsListResult(buckets []mstorage.BucketMetadata) (data BucketListResponse) {
|
||||
listbuckets := []Bucket{}
|
||||
|
||||
owner := Owner{
|
||||
ID: "minio",
|
||||
DisplayName: "minio",
|
||||
}
|
||||
|
||||
for _, bucket := range buckets {
|
||||
listbucket := Bucket{
|
||||
Name: bucket.Name,
|
||||
CreationDate: formatDate(bucket.Created),
|
||||
}
|
||||
listbuckets = append(listbuckets, listbucket)
|
||||
}
|
||||
|
||||
data = BucketListResponse{
|
||||
Owner: owner,
|
||||
Buckets: listbuckets,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func generateObjectsListResult(bucket string, objects []mstorage.ObjectMetadata) (data ObjectListResponse) {
|
||||
contents := []Content{}
|
||||
|
||||
owner := Owner{
|
||||
@@ -149,13 +207,13 @@ func generateListResult(objects []mstorage.ObjectMetadata) ListResponse {
|
||||
}
|
||||
contents = append(contents, content)
|
||||
}
|
||||
data := ListResponse{
|
||||
Name: "name",
|
||||
data = ObjectListResponse{
|
||||
Name: bucket,
|
||||
Contents: contents,
|
||||
MaxKeys: len(objects),
|
||||
IsTruncated: false,
|
||||
}
|
||||
return data
|
||||
return
|
||||
}
|
||||
|
||||
func formatDate(sec int64) string {
|
||||
|
||||
Reference in New Issue
Block a user