From 165f9316e2c1414f27d04fd7c86bf628dc6a096d Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 14 Feb 2025 18:02:49 +0100 Subject: [PATCH] s3api: return Location in CompleteMultipartUpload (fix #852) NB. The location returned is not guaranteed to work in all cases. This already fixes the parse issue in #852. --- src/api/s3/multipart.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs index fe39fc93..fa053df2 100644 --- a/src/api/s3/multipart.rs +++ b/src/api/s3/multipart.rs @@ -430,7 +430,16 @@ pub async fn handle_complete_multipart_upload( // Send response saying ok we're done let result = s3_xml::CompleteMultipartUploadResult { xmlns: (), - location: None, + // FIXME: the location returned is not always correct: + // - we always return https, but maybe some people do http + // - if root_domain is not specified, a full URL is not returned + location: garage + .config + .s3_api + .root_domain + .as_ref() + .map(|rd| s3_xml::Value(format!("https://{}.{}/{}", bucket_name, rd, key))) + .or(Some(s3_xml::Value(format!("/{}/{}", bucket_name, key)))), bucket: s3_xml::Value(bucket_name.to_string()), key: s3_xml::Value(key), etag: s3_xml::Value(format!("\"{}\"", etag)),