P2: S3 Multipart Upload support complete
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

- InitiateMultipartUpload: POST /s3/multipart/:bucket/:key/init
- UploadPart: PUT /s3/multipart/:bucket/:key/part
- CompleteMultipartUpload: POST /s3/multipart/:bucket/:key/complete
- AbortMultipartUpload: DELETE /s3/multipart/:bucket/:key/abort
- In-memory upload tracking with once_cell::Lazy
- Part files stored in temp dir during upload
- Final file assembled on CompleteMultipartUpload
- XML responses for all operations

Tests: 293 passed, 0 failed
This commit is contained in:
Warren
2026-06-21 22:44:17 +08:00
parent 5487ad63a6
commit ca0f541a79
4 changed files with 334 additions and 0 deletions

View File

@@ -243,8 +243,14 @@ pub async fn run(port: u16, file: Option<String>) -> anyhow::Result<()> {
get(crate::s3::get_object)
.head(crate::s3::head_object)
.put(crate::s3::put_object)
.post(crate::s3::put_object) // POST for uploads (same handler handles multipart detection)
.delete(crate::s3::delete_object)
)
// Multipart upload endpoints
.route("/s3/multipart/:bucket/*key/init", post(crate::s3::initiate_multipart_upload))
.route("/s3/multipart/:bucket/*key/part", put(crate::s3::upload_part))
.route("/s3/multipart/:bucket/*key/complete", post(crate::s3::complete_multipart_upload))
.route("/s3/multipart/:bucket/*key/abort", delete(crate::s3::abort_multipart_upload))
// Shell and Metrics API endpoints (public for monitoring)
.route("/api/v2/shell/status", get(shell_status_handler))
.route("/api/v2/metrics", get(metrics_handler))