Skip to content

Comments

feat(s3): add multipart upload support#199

Merged
sivchari merged 1 commit intomainfrom
feat/s3-multipart-upload
Feb 6, 2026
Merged

feat(s3): add multipart upload support#199
sivchari merged 1 commit intomainfrom
feat/s3-multipart-upload

Conversation

@sivchari
Copy link
Owner

@sivchari sivchari commented Feb 6, 2026

Summary

Implement S3 Multipart Upload APIs to support uploading large files in parts.

Changes

APIs Implemented

  • CreateMultipartUpload: Initiate a multipart upload and get upload ID
  • UploadPart: Upload a single part (part number 1-10000)
  • CompleteMultipartUpload: Complete upload by assembling parts
  • AbortMultipartUpload: Cancel an in-progress upload
  • ListMultipartUploads: List in-progress uploads in a bucket
  • ListParts: List uploaded parts for a multipart upload

Implementation Details

  • Add multipart upload types (MultipartUpload, Part, PartRequest)
  • Add XML response types for all 6 APIs
  • Implement in-memory storage with multipart upload tracking
  • Add route dispatchers to handle query parameter-based routing
    • ?uploads → CreateMultipartUpload
    • ?uploadId=X&partNumber=Y → UploadPart
    • ?uploadId=X (POST) → CompleteMultipartUpload
    • ?uploadId=X (DELETE) → AbortMultipartUpload
    • ?uploads (GET bucket) → ListMultipartUploads
    • ?uploadId=X (GET object) → ListParts
  • Calculate multipart ETag as MD5-of-MD5s-N format
  • Add 4 comprehensive integration tests

Files Changed

  • internal/service/s3/types.go: +103 lines (multipart types)
  • internal/service/s3/storage.go: +294 lines (storage implementation)
  • internal/service/s3/handlers.go: +382 lines (handlers + dispatchers)
  • internal/service/s3/service.go: +13 lines (route registration)
  • test/integration/s3_test.go: +323 lines (4 tests)

Testing

All integration tests pass:

  • ✅ TestS3_MultipartUpload_BasicFlow (10MB upload in 2 parts)
  • ✅ TestS3_MultipartUpload_AbortUpload (abort verification)
  • ✅ TestS3_MultipartUpload_ListMultipartUploads (list in-progress)
  • ✅ TestS3_MultipartUpload_ListParts (list uploaded parts)
  • ✅ All existing S3 tests still pass

Closes

Closes #3

@sivchari sivchari marked this pull request as ready for review February 6, 2026 03:28
@sivchari sivchari force-pushed the feat/s3-multipart-upload branch from d9743aa to 41f5ffd Compare February 6, 2026 10:35
Implement S3 Multipart Upload APIs to support uploading large files in parts:
- CreateMultipartUpload: initiate a multipart upload
- UploadPart: upload a part (1-10000)
- CompleteMultipartUpload: complete upload by assembling parts
- AbortMultipartUpload: cancel an in-progress upload
- ListMultipartUploads: list in-progress uploads in a bucket
- ListParts: list uploaded parts for a multipart upload

Changes:
- Add multipart upload types and response structures
- Implement in-memory storage for multipart uploads
- Add route dispatchers to handle query parameter-based routing
- Calculate multipart ETag as MD5 of concatenated part MD5s
- Add 4 integration tests using AWS SDK v2

Closes #3
@sivchari sivchari force-pushed the feat/s3-multipart-upload branch from 41f5ffd to c923cdb Compare February 6, 2026 10:37
@github-actions
Copy link
Contributor

github-actions bot commented Feb 6, 2026

📊 Integration Test Coverage Report

Total Coverage: 64.5%

@sivchari sivchari merged commit 8b576ba into main Feb 6, 2026
3 checks passed
@sivchari sivchari deleted the feat/s3-multipart-upload branch February 6, 2026 10:39
@github-actions github-actions bot mentioned this pull request Feb 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

S3: Multipart upload support

1 participant