Przeglądaj źródła

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

fix: Add S3_ENABLE_TAGGING env variable and fix S3_USE_ACCELERATE_ENDPOINT Type Error
Tim Jaeryang Baek 5 miesięcy temu
rodzic
commit
6424c8b644

+ 2 - 1
backend/open_webui/config.py

@@ -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_ENDPOINT_URL = os.environ.get("S3_ENDPOINT_URL", None)
 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_ENABLE_TAGGING = os.getenv("S3_ENABLE_TAGGING", "false").lower() == "true"
 
 GCS_BUCKET_NAME = os.environ.get("GCS_BUCKET_NAME", None)
 GOOGLE_APPLICATION_CREDENTIALS_JSON = os.environ.get(

+ 10 - 8
backend/open_webui/storage/provider.py

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