Separate create object and copy object
This commit is contained in:
parent
ae3afae893
commit
ac760626b3
4 changed files with 53 additions and 47 deletions
47
copy-object.go
Normal file
47
copy-object.go
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
minio "github.com/minio/minio-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CopyObjectInfo is the information about an object to copy
|
||||||
|
type CopyObjectInfo struct {
|
||||||
|
BucketName string `json:"bucketName"`
|
||||||
|
ObjectName string `json:"objectName"`
|
||||||
|
SourceBucketName string `json:"sourceBucketName"`
|
||||||
|
SourceObjectName string `json:"sourceObjectName"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CopyObjectHandler allows to copy an existing object
|
||||||
|
func CopyObjectHandler(s3 S3Client) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var copy CopyObjectInfo
|
||||||
|
|
||||||
|
err := json.NewDecoder(r.Body).Decode(©)
|
||||||
|
if err != nil {
|
||||||
|
handleHTTPError(w, http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
copyConds := minio.NewCopyConditions()
|
||||||
|
objectSource := fmt.Sprintf("/%s/%s", copy.SourceBucketName, copy.SourceObjectName)
|
||||||
|
err = s3.CopyObject(copy.BucketName, copy.ObjectName, objectSource, copyConds)
|
||||||
|
if err != nil {
|
||||||
|
handleHTTPError(w, http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set(headerContentType, contentTypeJSON)
|
||||||
|
w.WriteHeader(http.StatusCreated)
|
||||||
|
|
||||||
|
err = json.NewEncoder(w).Encode(copy)
|
||||||
|
if err != nil {
|
||||||
|
handleHTTPError(w, http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
|
@ -1,55 +1,14 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
minio "github.com/minio/minio-go"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// CopyObjectInfo is the information about an object to copy
|
// CreateObjectHandler allows to upload a new object
|
||||||
type CopyObjectInfo struct {
|
func CreateObjectHandler(s3 S3Client) http.Handler {
|
||||||
BucketName string `json:"bucketName"`
|
|
||||||
ObjectName string `json:"objectName"`
|
|
||||||
SourceBucketName string `json:"sourceBucketName"`
|
|
||||||
SourceObjectName string `json:"sourceObjectName"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateObjectFromJSONHandler allows to copy an existing object
|
|
||||||
func CreateObjectFromJSONHandler(s3 S3Client) http.Handler {
|
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
||||||
var copy CopyObjectInfo
|
|
||||||
|
|
||||||
err := json.NewDecoder(r.Body).Decode(©)
|
|
||||||
if err != nil {
|
|
||||||
handleHTTPError(w, http.StatusInternalServerError, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
copyConds := minio.NewCopyConditions()
|
|
||||||
objectSource := fmt.Sprintf("/%s/%s", copy.SourceBucketName, copy.SourceObjectName)
|
|
||||||
err = s3.CopyObject(copy.BucketName, copy.ObjectName, objectSource, copyConds)
|
|
||||||
if err != nil {
|
|
||||||
handleHTTPError(w, http.StatusInternalServerError, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set(headerContentType, contentTypeJSON)
|
|
||||||
w.WriteHeader(http.StatusCreated)
|
|
||||||
|
|
||||||
err = json.NewEncoder(w).Encode(copy)
|
|
||||||
if err != nil {
|
|
||||||
handleHTTPError(w, http.StatusInternalServerError, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateObjectFromFormHandler allows to upload a new object
|
|
||||||
func CreateObjectFromFormHandler(s3 S3Client) http.Handler {
|
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
|
|
||||||
|
|
4
glide.lock
generated
4
glide.lock
generated
|
@ -1,12 +1,12 @@
|
||||||
hash: 9b88c8ce183463a407bdb87f79b6b857d8343a7bb5ce4723223c539c654d6d6d
|
hash: 9b88c8ce183463a407bdb87f79b6b857d8343a7bb5ce4723223c539c654d6d6d
|
||||||
updated: 2017-04-14T19:23:49.562207386+02:00
|
updated: 2017-04-21T10:35:42.790104635+02:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/gorilla/context
|
- name: github.com/gorilla/context
|
||||||
version: 1ea25387ff6f684839d82767c1733ff4d4d15d0a
|
version: 1ea25387ff6f684839d82767c1733ff4d4d15d0a
|
||||||
- name: github.com/gorilla/mux
|
- name: github.com/gorilla/mux
|
||||||
version: 392c28fe23e1c45ddba891b0320b3b5df220beea
|
version: 392c28fe23e1c45ddba891b0320b3b5df220beea
|
||||||
- name: github.com/mastertinner/adapters
|
- name: github.com/mastertinner/adapters
|
||||||
version: 402cb2e8d9ff63dad093f386fc85ef2a36c42bfc
|
version: 5510790dd79e084a0b849ec99df4403af9344b45
|
||||||
subpackages:
|
subpackages:
|
||||||
- logging
|
- logging
|
||||||
- name: github.com/minio/minio-go
|
- name: github.com/minio/minio-go
|
||||||
|
|
4
main.go
4
main.go
|
@ -72,7 +72,7 @@ func main() {
|
||||||
Headers(headerContentType, contentTypeJSON).
|
Headers(headerContentType, contentTypeJSON).
|
||||||
Path("/{bucketName}/objects").
|
Path("/{bucketName}/objects").
|
||||||
Handler(adapters.Adapt(
|
Handler(adapters.Adapt(
|
||||||
CreateObjectFromJSONHandler(s3),
|
CopyObjectHandler(s3),
|
||||||
logging.Handler(logger),
|
logging.Handler(logger),
|
||||||
))
|
))
|
||||||
br.
|
br.
|
||||||
|
@ -80,7 +80,7 @@ func main() {
|
||||||
HeadersRegexp(headerContentType, contentTypeMultipartForm).
|
HeadersRegexp(headerContentType, contentTypeMultipartForm).
|
||||||
Path("/{bucketName}/objects").
|
Path("/{bucketName}/objects").
|
||||||
Handler(adapters.Adapt(
|
Handler(adapters.Adapt(
|
||||||
CreateObjectFromFormHandler(s3),
|
CreateObjectHandler(s3),
|
||||||
logging.Handler(logger),
|
logging.Handler(logger),
|
||||||
))
|
))
|
||||||
br.
|
br.
|
||||||
|
|
Loading…
Reference in a new issue