aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--weed/s3api/s3api_object_handlers.go12
-rw-r--r--weed/s3api/s3err/s3api_errors.go7
2 files changed, 17 insertions, 2 deletions
diff --git a/weed/s3api/s3api_object_handlers.go b/weed/s3api/s3api_object_handlers.go
index 93d6db79f..fa628f44e 100644
--- a/weed/s3api/s3api_object_handlers.go
+++ b/weed/s3api/s3api_object_handlers.go
@@ -5,12 +5,13 @@ import (
"encoding/json"
"encoding/xml"
"fmt"
- "github.com/chrislusf/seaweedfs/weed/s3api/s3err"
"io"
"io/ioutil"
"net/http"
"strings"
+ "github.com/chrislusf/seaweedfs/weed/s3api/s3err"
+
"github.com/gorilla/mux"
"github.com/chrislusf/seaweedfs/weed/glog"
@@ -333,7 +334,7 @@ func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader
}
if ret.Error != "" {
glog.Errorf("upload to filer error: %v", ret.Error)
- return "", s3err.ErrInternalError
+ return "", filerErrorToS3Error(ret.Error)
}
return etag, s3err.ErrNone
@@ -359,3 +360,10 @@ func getBucketAndObject(r *http.Request) (bucket, object string) {
return
}
+
+func filerErrorToS3Error(errString string) s3err.ErrorCode {
+ if strings.HasPrefix(errString, "existing ") && strings.HasSuffix(errString, "is a directory") {
+ return s3err.ErrExistingObjectIsDirectory
+ }
+ return s3err.ErrInternalError
+}
diff --git a/weed/s3api/s3err/s3api_errors.go b/weed/s3api/s3err/s3api_errors.go
index f95652afb..a3f7bb25e 100644
--- a/weed/s3api/s3err/s3api_errors.go
+++ b/weed/s3api/s3err/s3api_errors.go
@@ -92,6 +92,8 @@ const (
ErrMissingDateHeader
ErrInvalidRequest
ErrNotImplemented
+
+ ErrExistingObjectIsDirectory
)
// error code to APIError structure, these fields carry respective
@@ -344,6 +346,11 @@ var errorCodeResponse = map[ErrorCode]APIError{
Description: "A header you provided implies functionality that is not implemented",
HTTPStatusCode: http.StatusNotImplemented,
},
+ ErrExistingObjectIsDirectory: {
+ Code: "ExistingObjectIsDirectory",
+ Description: "Existing Object is a directory.",
+ HTTPStatusCode: http.StatusConflict,
+ },
}
// GetAPIError provides API Error for input API error code.