aboutsummaryrefslogtreecommitdiff
path: root/weed/s3api/filer_multipart.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/s3api/filer_multipart.go')
-rw-r--r--weed/s3api/filer_multipart.go70
1 files changed, 70 insertions, 0 deletions
diff --git a/weed/s3api/filer_multipart.go b/weed/s3api/filer_multipart.go
new file mode 100644
index 000000000..d85a94326
--- /dev/null
+++ b/weed/s3api/filer_multipart.go
@@ -0,0 +1,70 @@
+package s3api
+
+import (
+ "github.com/aws/aws-sdk-go/service/s3"
+ "github.com/aws/aws-sdk-go/aws"
+ "github.com/satori/go.uuid"
+ "github.com/chrislusf/seaweedfs/weed/glog"
+ "github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
+)
+
+func (s3a *S3ApiServer) createMultipartUpload(input *s3.CreateMultipartUploadInput) (output *s3.CreateMultipartUploadOutput, code ErrorCode) {
+ uploadId, _ := uuid.NewV4()
+ uploadIdString := uploadId.String()
+
+ if err := s3a.mkdir(s3a.genUploadsFolder(*input.Bucket), uploadIdString, func(entry *filer_pb.Entry) {
+ if entry.Extended == nil {
+ entry.Extended = make(map[string]string)
+ }
+ entry.Extended["key"] = *input.Key
+ }); err != nil {
+ glog.Errorf("NewMultipartUpload error: %v", err)
+ return nil, ErrInternalError
+ }
+
+ output = &s3.CreateMultipartUploadOutput{
+ Bucket: input.Bucket,
+ Key: input.Key,
+ UploadId: aws.String(uploadIdString),
+ }
+
+ return
+}
+
+func (s3a *S3ApiServer) completeMultipartUpload(input *s3.CompleteMultipartUploadInput) (output *s3.CompleteMultipartUploadOutput, code ErrorCode) {
+ return
+}
+
+func (s3a *S3ApiServer) abortMultipartUpload(input *s3.AbortMultipartUploadInput) (output *s3.AbortMultipartUploadOutput, code ErrorCode) {
+ return
+}
+
+func (s3a *S3ApiServer) listMultipartUploads(input *s3.ListMultipartUploadsInput) (output *s3.ListMultipartUploadsOutput, code ErrorCode) {
+ entries, err := s3a.list(s3a.genUploadsFolder(*input.Bucket))
+ if err != nil {
+ glog.Errorf("listMultipartUploads %s error: %v", *input.Bucket, err)
+ return nil, ErrNoSuchUpload
+ }
+ output = &s3.ListMultipartUploadsOutput{
+ Bucket: input.Bucket,
+ Delimiter: input.Delimiter,
+ EncodingType: input.EncodingType,
+ KeyMarker: input.KeyMarker,
+ MaxUploads: input.MaxUploads,
+ Prefix: input.Prefix,
+ }
+ for _, entry := range entries {
+ if entry.Extended != nil {
+ key := entry.Extended["key"]
+ output.Uploads = append(output.Uploads, &s3.MultipartUpload{
+ Key: aws.String(key),
+ UploadId: aws.String(entry.Name),
+ })
+ }
+ }
+ return
+}
+
+func (s3a *S3ApiServer) listObjectParts(input *s3.ListPartsInput) (output *s3.ListPartsOutput, code ErrorCode) {
+ return
+}