diff --git a/s3/src/bucket.rs b/s3/src/bucket.rs index 7cf34d861b..c125a218eb 100644 --- a/s3/src/bucket.rs +++ b/s3/src/bucket.rs @@ -1664,7 +1664,7 @@ impl Bucket { } let msg = self - .initiate_multipart_upload(s3_path, content_type) + .initiate_multipart_upload(s3_path, content_type, custom_headers) .await?; let path = msg.key; let upload_id = &msg.upload_id; @@ -1806,7 +1806,7 @@ impl Bucket { s3_path: &str, content_type: &str, ) -> Result { - let msg = self.initiate_multipart_upload(s3_path, content_type)?; + let msg = self.initiate_multipart_upload(s3_path, content_type, None)?; let path = msg.key; let upload_id = &msg.upload_id; @@ -1859,8 +1859,12 @@ impl Bucket { &self, s3_path: &str, content_type: &str, + custom_headers: Option, ) -> Result { - let command = Command::InitiateMultipartUpload { content_type }; + let command = Command::InitiateMultipartUpload { + content_type, + custom_headers, + }; let request = RequestImpl::new(self, s3_path, command).await?; let response_data = request.response_data(false).await?; if response_data.status_code() >= 300 { @@ -1877,8 +1881,12 @@ impl Bucket { &self, s3_path: &str, content_type: &str, + custom_headers: Option, ) -> Result { - let command = Command::InitiateMultipartUpload { content_type }; + let command = Command::InitiateMultipartUpload { + content_type, + custom_headers, + }; let request = RequestImpl::new(self, s3_path, command)?; let response_data = request.response_data(false)?; if response_data.status_code() >= 300 { diff --git a/s3/src/command.rs b/s3/src/command.rs index c56ca3ee46..86d20837d2 100644 --- a/s3/src/command.rs +++ b/s3/src/command.rs @@ -134,6 +134,7 @@ pub enum Command<'a> { }, InitiateMultipartUpload { content_type: &'a str, + custom_headers: Option, }, UploadPart { part_number: u32, @@ -258,7 +259,7 @@ impl<'a> Command<'a> { pub fn content_type(&self) -> String { match self { - Command::InitiateMultipartUpload { content_type } => content_type.to_string(), + Command::InitiateMultipartUpload { content_type, .. } => content_type.to_string(), Command::PutObject { content_type, .. } => content_type.to_string(), Command::CompleteMultipartUpload { .. } | Command::PutBucketLifecycle { .. } diff --git a/s3/src/request/request_trait.rs b/s3/src/request/request_trait.rs index 9199689102..f53325c6e3 100644 --- a/s3/src/request/request_trait.rs +++ b/s3/src/request/request_trait.rs @@ -696,6 +696,15 @@ pub trait Request { } } + // Append custom headers for InitiateMultipartUpload request if any + if let Command::InitiateMultipartUpload { custom_headers, .. } = self.command() + && let Some(custom_headers) = custom_headers + { + for (k, v) in custom_headers.iter() { + headers.insert(k.clone(), v.clone()); + } + } + let host_header = self.host_header(); headers.insert(HOST, host_header.parse()?);