mirror of
https://github.com/minio/minio.git
synced 2025-02-09 04:38:09 -05:00
Merge pull request #45 from fkautz/pr_out_cleaning_up_minioapi_code
This commit is contained in:
commit
aa2a714d50
@ -29,10 +29,18 @@ import (
|
|||||||
mstorage "github.com/minio-io/minio/pkg/storage"
|
mstorage "github.com/minio-io/minio/pkg/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type contentType int
|
||||||
|
|
||||||
|
const (
|
||||||
|
xmlType contentType = iota
|
||||||
|
jsonType = iota
|
||||||
|
)
|
||||||
|
|
||||||
type minioApi struct {
|
type minioApi struct {
|
||||||
storage mstorage.Storage
|
storage mstorage.Storage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// No encoder interface exists, so we create one.
|
||||||
type encoder interface {
|
type encoder interface {
|
||||||
Encode(v interface{}) error
|
Encode(v interface{}) error
|
||||||
}
|
}
|
||||||
@ -53,21 +61,28 @@ func HttpHandler(storage mstorage.Storage) http.Handler {
|
|||||||
return mux
|
return mux
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func writeObjectHeaders(w http.ResponseWriter, metadata mstorage.ObjectMetadata) {
|
||||||
|
lastModified := metadata.Created.Format(time.RFC1123)
|
||||||
|
w.Header().Set("ETag", metadata.ETag)
|
||||||
|
w.Header().Set("Last-Modified", lastModified)
|
||||||
|
w.Header().Set("Content-Length", strconv.Itoa(metadata.Size))
|
||||||
|
w.Header().Set("Content-Type", "text/plain")
|
||||||
|
}
|
||||||
|
|
||||||
func (server *minioApi) getObjectHandler(w http.ResponseWriter, req *http.Request) {
|
func (server *minioApi) getObjectHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
vars := mux.Vars(req)
|
vars := mux.Vars(req)
|
||||||
bucket := vars["bucket"]
|
bucket := vars["bucket"]
|
||||||
object := vars["object"]
|
object := vars["object"]
|
||||||
|
|
||||||
metadata, err := server.storage.GetObjectMetadata(bucket, object)
|
metadata, err := server.storage.GetObjectMetadata(bucket, object)
|
||||||
lastModified := metadata.Created.Format(time.RFC1123)
|
|
||||||
w.Header().Set("ETag", metadata.ETag)
|
|
||||||
w.Header().Set("Last-Modified", lastModified)
|
|
||||||
w.Header().Set("Content-Length", strconv.Itoa(metadata.Size))
|
|
||||||
w.Header().Set("Content-Type", "text/plain")
|
|
||||||
switch err := err.(type) {
|
switch err := err.(type) {
|
||||||
case nil: // success
|
case nil: // success
|
||||||
{
|
{
|
||||||
log.Println("Found: " + bucket + "#" + object)
|
log.Println("Found: " + bucket + "#" + object)
|
||||||
|
writeObjectHeaders(w, metadata)
|
||||||
|
if _, err := server.storage.CopyObjectToWriter(w, bucket, object); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case mstorage.ObjectNotFound:
|
case mstorage.ObjectNotFound:
|
||||||
{
|
{
|
||||||
@ -80,9 +95,6 @@ func (server *minioApi) getObjectHandler(w http.ResponseWriter, req *http.Reques
|
|||||||
w.WriteHeader(http.StatusInternalServerError)
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if _, err := server.storage.CopyObjectToWriter(w, bucket, object); err != nil {
|
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (server *minioApi) headObjectHandler(w http.ResponseWriter, req *http.Request) {
|
func (server *minioApi) headObjectHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
@ -92,21 +104,15 @@ func (server *minioApi) headObjectHandler(w http.ResponseWriter, req *http.Reque
|
|||||||
|
|
||||||
metadata, err := server.storage.GetObjectMetadata(bucket, object)
|
metadata, err := server.storage.GetObjectMetadata(bucket, object)
|
||||||
switch err := err.(type) {
|
switch err := err.(type) {
|
||||||
case nil: // success
|
case nil:
|
||||||
|
writeObjectHeaders(w, metadata)
|
||||||
case mstorage.ObjectNotFound:
|
case mstorage.ObjectNotFound:
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
return
|
|
||||||
default:
|
default:
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
lastModified := metadata.Created.Format(time.RFC1123)
|
|
||||||
w.Header().Set("ETag", metadata.ETag)
|
|
||||||
w.Header().Set("Last-Modified", lastModified)
|
|
||||||
w.Header().Set("Content-Length", strconv.Itoa(metadata.Size))
|
|
||||||
w.Header().Set("Content-Type", "text/plain")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (server *minioApi) listBucketsHandler(w http.ResponseWriter, req *http.Request) {
|
func (server *minioApi) listBucketsHandler(w http.ResponseWriter, req *http.Request) {
|
||||||
@ -116,10 +122,10 @@ func (server *minioApi) listBucketsHandler(w http.ResponseWriter, req *http.Requ
|
|||||||
prefix = ""
|
prefix = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
contentType := "xml"
|
contentType := xmlType
|
||||||
if _, ok := req.Header["Accept"]; ok {
|
if _, ok := req.Header["Accept"]; ok {
|
||||||
if req.Header["Accept"][0] == "application/json" {
|
if req.Header["Accept"][0] == "application/json" {
|
||||||
contentType = "json"
|
contentType = jsonType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buckets := server.storage.ListBuckets(prefix)
|
buckets := server.storage.ListBuckets(prefix)
|
||||||
@ -127,12 +133,12 @@ func (server *minioApi) listBucketsHandler(w http.ResponseWriter, req *http.Requ
|
|||||||
|
|
||||||
var bytesBuffer bytes.Buffer
|
var bytesBuffer bytes.Buffer
|
||||||
var encoder encoder
|
var encoder encoder
|
||||||
if contentType == "json" {
|
if contentType == xmlType {
|
||||||
|
w.Header().Set("Content-Type", "application/xml")
|
||||||
|
encoder = xml.NewEncoder(&bytesBuffer)
|
||||||
|
} else if contentType == jsonType {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
encoder = json.NewEncoder(&bytesBuffer)
|
encoder = json.NewEncoder(&bytesBuffer)
|
||||||
} else {
|
|
||||||
w.Header().Set("Content-Type", `xml version="1.0" encoding="UTF-8"`)
|
|
||||||
encoder = xml.NewEncoder(&bytesBuffer)
|
|
||||||
}
|
}
|
||||||
encoder.Encode(response)
|
encoder.Encode(response)
|
||||||
w.Write(bytesBuffer.Bytes())
|
w.Write(bytesBuffer.Bytes())
|
||||||
@ -156,10 +162,10 @@ func (server *minioApi) listObjectsHandler(w http.ResponseWriter, req *http.Requ
|
|||||||
prefix = ""
|
prefix = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
contentType := "xml"
|
contentType := xmlType
|
||||||
if _, ok := req.Header["Accept"]; ok {
|
if _, ok := req.Header["Accept"]; ok {
|
||||||
if req.Header["Accept"][0] == "application/json" {
|
if req.Header["Accept"][0] == "application/json" {
|
||||||
contentType = "json"
|
contentType = jsonType
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,12 +174,12 @@ func (server *minioApi) listObjectsHandler(w http.ResponseWriter, req *http.Requ
|
|||||||
|
|
||||||
var bytesBuffer bytes.Buffer
|
var bytesBuffer bytes.Buffer
|
||||||
var encoder encoder
|
var encoder encoder
|
||||||
if contentType == "json" {
|
if contentType == xmlType {
|
||||||
w.Header().Set("Content-Type", "application/json")
|
|
||||||
encoder = json.NewEncoder(&bytesBuffer)
|
|
||||||
} else {
|
|
||||||
w.Header().Set("Content-Type", `xml version="1.0" encoding="UTF-8"`)
|
w.Header().Set("Content-Type", `xml version="1.0" encoding="UTF-8"`)
|
||||||
encoder = xml.NewEncoder(&bytesBuffer)
|
encoder = xml.NewEncoder(&bytesBuffer)
|
||||||
|
} else if contentType == jsonType {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
encoder = json.NewEncoder(&bytesBuffer)
|
||||||
}
|
}
|
||||||
|
|
||||||
encoder.Encode(response)
|
encoder.Encode(response)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user