From 693afe89b0a0ffb997a6805efacd5afd5f668c55 Mon Sep 17 00:00:00 2001 From: Lyrise Date: Sat, 30 Mar 2024 17:19:55 +0900 Subject: [PATCH] fix --- modules/cloud/Cargo.toml | 1 + modules/cloud/src/aws/s3/s3_client.rs | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/cloud/Cargo.toml b/modules/cloud/Cargo.toml index c36d6ec..556444f 100644 --- a/modules/cloud/Cargo.toml +++ b/modules/cloud/Cargo.toml @@ -33,6 +33,7 @@ aws-sdk-secretsmanager = { workspace = true, optional = true } aws-sdk-s3 = { workspace = true, optional = true } aws-sdk-sqs = { workspace = true, optional = true } aws-sdk-sesv2 = { workspace = true, optional = true } +urlencoding = { workspace = true } [dev-dependencies] testcontainers = { workspace = true } diff --git a/modules/cloud/src/aws/s3/s3_client.rs b/modules/cloud/src/aws/s3/s3_client.rs index cd48a3c..3c85aad 100644 --- a/modules/cloud/src/aws/s3/s3_client.rs +++ b/modules/cloud/src/aws/s3/s3_client.rs @@ -7,6 +7,7 @@ use chrono::{DateTime, Duration, Utc}; use tokio::fs::File; use tokio::io::AsyncWriteExt; use tokio_stream::StreamExt; +use urlencoding::encode; #[async_trait] pub trait S3Client { @@ -28,12 +29,14 @@ impl S3Client for S3ClientImpl { .expires_in(expires_in.to_std()?) .build()?; + let encoded_filename = encode(filename).to_string(); + let request = self .client .get_object() .bucket(self.bucket.as_str()) .key(key) - .set_response_content_disposition(Some(format!("attachment; filename=\"{filename}\""))) + .set_response_content_disposition(Some(format!("attachment; filename*=UTF-8''\"{encoded_filename}\""))) .presigned(presigning_config) .await?; Ok(request.uri().to_string())