From d4477eba40824a9be41144a33b419bb471261611 Mon Sep 17 00:00:00 2001 From: Erick Guan <297343+erickguan@users.noreply.github.com> Date: Fri, 24 Jul 2026 08:37:30 +0800 Subject: [PATCH] Revert "fix(services/gcs): stop double-encoding object paths in writer (#7927)" This reverts commit 19e028238cdc11398099bd25a8ef7895a15d68a7. --- core/services/gcs/src/core.rs | 7 +------ core/services/gcs/src/writer.rs | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/core/services/gcs/src/core.rs b/core/services/gcs/src/core.rs index acaad74ebc12..80eab2090725 100644 --- a/core/services/gcs/src/core.rs +++ b/core/services/gcs/src/core.rs @@ -605,12 +605,7 @@ impl GcsCore { ) -> Result> { let p = build_abs_path(&self.root, path); - let url = format!( - "{}/{}/{}?uploads", - self.endpoint, - self.bucket, - gcs_percent_encode_path(&p) - ); + let url = format!("{}/{}/{}?uploads", self.endpoint, self.bucket, p); let mut builder = Request::post(&url) .header(CONTENT_LENGTH, 0) diff --git a/core/services/gcs/src/writer.rs b/core/services/gcs/src/writer.rs index 4217704aa21c..769c0fbbe66a 100644 --- a/core/services/gcs/src/writer.rs +++ b/core/services/gcs/src/writer.rs @@ -23,6 +23,7 @@ use http::StatusCode; use super::core::CompleteMultipartUploadRequestPart; use super::core::GcsCore; use super::core::InitiateMultipartUploadResult; +use super::core::gcs_percent_encode_path; use super::core::parse_error; use opendal_core::raw::*; use opendal_core::*; @@ -50,10 +51,12 @@ impl GcsWriter { impl oio::MultipartWrite for GcsWriter { async fn write_once(&self, _: u64, body: Buffer) -> Result { let size = body.len() as u64; - // Forward the raw path; the core request builder percent-encodes once. - let req = self - .core - .gcs_insert_object_request(&self.path, Some(size), &self.op, body)?; + let req = self.core.gcs_insert_object_request( + &gcs_percent_encode_path(&self.path), + Some(size), + &self.op, + body, + )?; let req = self.core.sign(&self.ctx, req).await?; @@ -74,7 +77,11 @@ impl oio::MultipartWrite for GcsWriter { async fn initiate_part(&self) -> Result { let resp = self .core - .gcs_initiate_multipart_upload(&self.ctx, &self.path, &self.op) + .gcs_initiate_multipart_upload( + &self.ctx, + &gcs_percent_encode_path(&self.path), + &self.op, + ) .await?; if !resp.status().is_success() {