Skip to content

feat: Add URL encoding for S3 object keys#1164

Open
Tnirpps wants to merge 1 commit intouserver-framework:developfrom
Tnirpps:tnirpps-s3api-url-encode
Open

feat: Add URL encoding for S3 object keys#1164
Tnirpps wants to merge 1 commit intouserver-framework:developfrom
Tnirpps:tnirpps-s3api-url-encode

Conversation

@Tnirpps
Copy link
Copy Markdown

@Tnirpps Tnirpps commented Apr 3, 2026

S3 URL Encoding Fix

Problem

S3 API methods (GetObject, PutObject, etc.) failed with object keys containing special characters (spaces, Cyrillic, etc.) because they weren't being URL-encoded.
Bad URL, curl error: malformed input, url: https://mybucket.s3-some-site.awsornot.com/path/to/object with : spaces

Solution

Added two functions for proper S3 object key encoding, compatible with AWS SDK behavior:

  • UrlEncodePathSegment() - encodes a single path segment, preserving RFC 3986 unreserved chars (-, _, ., ~) and S3-safe chars ($, &, ,, :, =, @)
  • EncodeS3Key() - encodes S3 object key, preserving / as path separators

Implementation follows AWS SDK approach: aws-sdk-cpp/URI.cpp

Examples:

EncodeS3Key("folder/file with spaces.txt")  // → "folder/file%20with%20spaces.txt"
EncodeS3Key("folder/файл.txt")              // → "folder/%D1%84%D0%B0%D0%B9%D0%BB.txt"

Changes

  • universal/http/url.hpp, url.cpp: New encoding functions
  • universal/http/url_test.cpp: new tests
  • libraries/s3api/s3api_methods.cpp: Apply EncodeS3Key() to all S3 methods

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant