Merge pull request #13643 from suleimanelkhoury/S3-tagging-boto3

fix: Add S3_ENABLE_TAGGING env variable and fix S3_USE_ACCELERATE_ENDPOINT Type Error
This commit is contained in:
Tim Jaeryang Baek 2025-05-07 22:02:14 +04:00 committed by GitHub
commit 6424c8b644
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 9 deletions

View File

@ -761,9 +761,10 @@ S3_BUCKET_NAME = os.environ.get("S3_BUCKET_NAME", None)
S3_KEY_PREFIX = os.environ.get("S3_KEY_PREFIX", None) S3_KEY_PREFIX = os.environ.get("S3_KEY_PREFIX", None)
S3_ENDPOINT_URL = os.environ.get("S3_ENDPOINT_URL", None) S3_ENDPOINT_URL = os.environ.get("S3_ENDPOINT_URL", None)
S3_USE_ACCELERATE_ENDPOINT = ( S3_USE_ACCELERATE_ENDPOINT = (
os.environ.get("S3_USE_ACCELERATE_ENDPOINT", "False").lower() == "true" os.environ.get("S3_USE_ACCELERATE_ENDPOINT", "false").lower() == "true"
) )
S3_ADDRESSING_STYLE = os.environ.get("S3_ADDRESSING_STYLE", None) S3_ADDRESSING_STYLE = os.environ.get("S3_ADDRESSING_STYLE", None)
S3_ENABLE_TAGGING = os.getenv("S3_ENABLE_TAGGING", "false").lower() == "true"
GCS_BUCKET_NAME = os.environ.get("GCS_BUCKET_NAME", None) GCS_BUCKET_NAME = os.environ.get("GCS_BUCKET_NAME", None)
GOOGLE_APPLICATION_CREDENTIALS_JSON = os.environ.get( GOOGLE_APPLICATION_CREDENTIALS_JSON = os.environ.get(

View File

@ -17,6 +17,7 @@ from open_webui.config import (
S3_SECRET_ACCESS_KEY, S3_SECRET_ACCESS_KEY,
S3_USE_ACCELERATE_ENDPOINT, S3_USE_ACCELERATE_ENDPOINT,
S3_ADDRESSING_STYLE, S3_ADDRESSING_STYLE,
S3_ENABLE_TAGGING,
GCS_BUCKET_NAME, GCS_BUCKET_NAME,
GOOGLE_APPLICATION_CREDENTIALS_JSON, GOOGLE_APPLICATION_CREDENTIALS_JSON,
AZURE_STORAGE_ENDPOINT, AZURE_STORAGE_ENDPOINT,
@ -140,18 +141,19 @@ class S3StorageProvider(StorageProvider):
) -> Tuple[bytes, str]: ) -> Tuple[bytes, str]:
"""Handles uploading of the file to S3 storage.""" """Handles uploading of the file to S3 storage."""
_, file_path = LocalStorageProvider.upload_file(file, filename, tags) _, file_path = LocalStorageProvider.upload_file(file, filename, tags)
tagging = {"TagSet": [{"Key": k, "Value": v} for k, v in tags.items()]} s3_key = os.path.join(self.key_prefix, filename)
try: try:
s3_key = os.path.join(self.key_prefix, filename)
self.s3_client.upload_file(file_path, self.bucket_name, s3_key) self.s3_client.upload_file(file_path, self.bucket_name, s3_key)
self.s3_client.put_object_tagging( if S3_ENABLE_TAGGING and tags:
Bucket=self.bucket_name, tagging = {"TagSet": [{"Key": k, "Value": v} for k, v in tags.items()]}
Key=s3_key, self.s3_client.put_object_tagging(
Tagging=tagging, Bucket=self.bucket_name,
) Key=s3_key,
Tagging=tagging,
)
return ( return (
open(file_path, "rb").read(), open(file_path, "rb").read(),
"s3://" + self.bucket_name + "/" + s3_key, f"s3://{self.bucket_name}/{s3_key}",
) )
except ClientError as e: except ClientError as e:
raise RuntimeError(f"Error uploading file to S3: {e}") raise RuntimeError(f"Error uploading file to S3: {e}")