diff options
Diffstat (limited to 'weed/s3api/s3err/error_handler.go')
| -rw-r--r-- | weed/s3api/s3err/error_handler.go | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/weed/s3api/s3err/error_handler.go b/weed/s3api/s3err/error_handler.go index f176d4b6c..09b83065f 100644 --- a/weed/s3api/s3err/error_handler.go +++ b/weed/s3api/s3err/error_handler.go @@ -5,8 +5,10 @@ import ( "encoding/xml" "fmt" "github.com/chrislusf/seaweedfs/weed/glog" + "github.com/gorilla/mux" "net/http" "strconv" + "strings" "time" ) @@ -26,18 +28,27 @@ func WriteEmptyResponse(w http.ResponseWriter, statusCode int) { } func WriteErrorResponse(w http.ResponseWriter, errorCode ErrorCode, r *http.Request) { + vars := mux.Vars(r) + bucket := vars["bucket"] + object := vars["object"] + if !strings.HasPrefix(object, "/") { + object = "/" + object + } + apiError := GetAPIError(errorCode) - errorResponse := getRESTErrorResponse(apiError, r.URL.Path) + errorResponse := getRESTErrorResponse(apiError, r.URL.Path, bucket, object) encodedErrorResponse := EncodeXMLResponse(errorResponse) WriteResponse(w, apiError.HTTPStatusCode, encodedErrorResponse, MimeXML) } -func getRESTErrorResponse(err APIError, resource string) RESTErrorResponse { +func getRESTErrorResponse(err APIError, resource string, bucket, object string) RESTErrorResponse { return RESTErrorResponse{ - Code: err.Code, - Message: err.Description, - Resource: resource, - RequestID: fmt.Sprintf("%d", time.Now().UnixNano()), + Code: err.Code, + BucketName: bucket, + Key: object[1:], + Message: err.Description, + Resource: resource, + RequestID: fmt.Sprintf("%d", time.Now().UnixNano()), } } |
