mirror of
https://github.com/minio/minio.git
synced 2024-12-24 22:25:54 -05:00
browser: Object upload should save metadata and notify. (#2309)
Object upload from browser should save additional incoming metadata. Additionally should also notify through bucket notifications once they are set. Fixes #2292
This commit is contained in:
parent
ad19bf0ec1
commit
65f71ce0c5
@ -397,7 +397,7 @@ func (api objectAPIHandlers) PostPolicyBucketHandler(w http.ResponseWriter, r *h
|
|||||||
writeSuccessResponse(w, encodedSuccessResponse)
|
writeSuccessResponse(w, encodedSuccessResponse)
|
||||||
|
|
||||||
// Load notification config if any.
|
// Load notification config if any.
|
||||||
nConfig, err := api.loadNotificationConfig(bucket)
|
nConfig, err := loadNotificationConfig(api.ObjectAPI, bucket)
|
||||||
// Notifications not set, return.
|
// Notifications not set, return.
|
||||||
if err == errNoSuchNotifications {
|
if err == errNoSuchNotifications {
|
||||||
return
|
return
|
||||||
|
@ -32,10 +32,10 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// loads notifcation config if any for a given bucket, returns back structured notification config.
|
// loads notifcation config if any for a given bucket, returns back structured notification config.
|
||||||
func (api objectAPIHandlers) loadNotificationConfig(bucket string) (nConfig notificationConfig, err error) {
|
func loadNotificationConfig(objAPI ObjectLayer, bucket string) (nConfig notificationConfig, err error) {
|
||||||
notificationConfigPath := path.Join(bucketConfigPrefix, bucket, bucketNotificationConfig)
|
notificationConfigPath := path.Join(bucketConfigPrefix, bucket, bucketNotificationConfig)
|
||||||
var objInfo ObjectInfo
|
var objInfo ObjectInfo
|
||||||
objInfo, err = api.ObjectAPI.GetObjectInfo(minioMetaBucket, notificationConfigPath)
|
objInfo, err = objAPI.GetObjectInfo(minioMetaBucket, notificationConfigPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
switch err.(type) {
|
switch err.(type) {
|
||||||
case ObjectNotFound:
|
case ObjectNotFound:
|
||||||
@ -44,7 +44,7 @@ func (api objectAPIHandlers) loadNotificationConfig(bucket string) (nConfig noti
|
|||||||
return notificationConfig{}, err
|
return notificationConfig{}, err
|
||||||
}
|
}
|
||||||
var buffer bytes.Buffer
|
var buffer bytes.Buffer
|
||||||
err = api.ObjectAPI.GetObject(minioMetaBucket, notificationConfigPath, 0, objInfo.Size, &buffer)
|
err = objAPI.GetObject(minioMetaBucket, notificationConfigPath, 0, objInfo.Size, &buffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
switch err.(type) {
|
switch err.(type) {
|
||||||
case ObjectNotFound:
|
case ObjectNotFound:
|
||||||
|
@ -357,7 +357,7 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re
|
|||||||
pipeReader.Close()
|
pipeReader.Close()
|
||||||
|
|
||||||
// Load notification config if any.
|
// Load notification config if any.
|
||||||
nConfig, err := api.loadNotificationConfig(bucket)
|
nConfig, err := loadNotificationConfig(api.ObjectAPI, bucket)
|
||||||
// Notifications not set, return.
|
// Notifications not set, return.
|
||||||
if err == errNoSuchNotifications {
|
if err == errNoSuchNotifications {
|
||||||
return
|
return
|
||||||
@ -441,7 +441,7 @@ func (api objectAPIHandlers) PutObjectHandler(w http.ResponseWriter, r *http.Req
|
|||||||
writeSuccessResponse(w, nil)
|
writeSuccessResponse(w, nil)
|
||||||
|
|
||||||
// Load notification config if any.
|
// Load notification config if any.
|
||||||
nConfig, err := api.loadNotificationConfig(bucket)
|
nConfig, err := loadNotificationConfig(api.ObjectAPI, bucket)
|
||||||
// Notifications not set, return.
|
// Notifications not set, return.
|
||||||
if err == errNoSuchNotifications {
|
if err == errNoSuchNotifications {
|
||||||
return
|
return
|
||||||
@ -778,7 +778,7 @@ func (api objectAPIHandlers) CompleteMultipartUploadHandler(w http.ResponseWrite
|
|||||||
w.(http.Flusher).Flush()
|
w.(http.Flusher).Flush()
|
||||||
|
|
||||||
// Load notification config if any.
|
// Load notification config if any.
|
||||||
nConfig, err := api.loadNotificationConfig(bucket)
|
nConfig, err := loadNotificationConfig(api.ObjectAPI, bucket)
|
||||||
// Notifications not set, return.
|
// Notifications not set, return.
|
||||||
if err == errNoSuchNotifications {
|
if err == errNoSuchNotifications {
|
||||||
return
|
return
|
||||||
@ -835,7 +835,7 @@ func (api objectAPIHandlers) DeleteObjectHandler(w http.ResponseWriter, r *http.
|
|||||||
writeSuccessNoContent(w)
|
writeSuccessNoContent(w)
|
||||||
|
|
||||||
// Load notification config if any.
|
// Load notification config if any.
|
||||||
nConfig, err := api.loadNotificationConfig(bucket)
|
nConfig, err := loadNotificationConfig(api.ObjectAPI, bucket)
|
||||||
// Notifications not set, return.
|
// Notifications not set, return.
|
||||||
if err == errNoSuchNotifications {
|
if err == errNoSuchNotifications {
|
||||||
return
|
return
|
||||||
|
@ -374,10 +374,36 @@ func (web *webAPIHandlers) Upload(w http.ResponseWriter, r *http.Request) {
|
|||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
bucket := vars["bucket"]
|
bucket := vars["bucket"]
|
||||||
object := vars["object"]
|
object := vars["object"]
|
||||||
// FIXME: Allow file upload handler to set content-type, content-encoding.
|
|
||||||
if _, err := web.ObjectAPI.PutObject(bucket, object, -1, r.Body, nil); err != nil {
|
// Extract incoming metadata if any.
|
||||||
|
metadata := extractMetadataFromHeader(r.Header)
|
||||||
|
|
||||||
|
if _, err := web.ObjectAPI.PutObject(bucket, object, -1, r.Body, metadata); err != nil {
|
||||||
writeWebErrorResponse(w, err)
|
writeWebErrorResponse(w, err)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load notification config if any.
|
||||||
|
nConfig, err := loadNotificationConfig(web.ObjectAPI, bucket)
|
||||||
|
// Notifications not set, return.
|
||||||
|
if err == errNoSuchNotifications {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// For all other errors, return.
|
||||||
|
if err != nil {
|
||||||
|
errorIf(err, "Unable to load notification config for bucket: \"%s\"", bucket)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fetch object info for notifications.
|
||||||
|
objInfo, err := web.ObjectAPI.GetObjectInfo(bucket, object)
|
||||||
|
if err != nil {
|
||||||
|
errorIf(err, "Unable to fetch object info for \"%s\"", path.Join(bucket, object))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Notify object created event.
|
||||||
|
notifyObjectCreatedEvent(nConfig, ObjectCreatedPut, bucket, objInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Download - file download handler.
|
// Download - file download handler.
|
||||||
|
Loading…
Reference in New Issue
Block a user