From 317ebe08621b7e1b95328316383d005cee144e22 Mon Sep 17 00:00:00 2001 From: Tslmuun <50679343+Tslmuun@users.noreply.github.com> Date: Sat, 30 Dec 2023 18:19:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0S3=20hostname=E9=80=89?= =?UTF-8?q?=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 方便从S3 cdn域名下载文件。 --- core/settings.py | 7 ++++--- core/storage.py | 13 ++++++++----- fcb-fronted/src/views/Admin/SettingView.vue | 4 ++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/core/settings.py b/core/settings.py index 2d748ca..eccb0ee 100644 --- a/core/settings.py +++ b/core/settings.py @@ -12,12 +12,13 @@ default_value = { 'file_storage': 'local', 'name': '文件快递柜-FileCodeBox', 'description': '开箱即用的文件快传系统', - 'keywords': 'FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件', + 'keywords': 'FileCodeBox, 文件快递柜, 口令传送箱, 匿名口令分享文本, 文件', 'max_save_seconds': 0, 's3_access_key_id': '', 's3_secret_access_key': '', 's3_bucket_name': '', 's3_endpoint_url': '', + 's3_hostname': '', 's3_proxy': 0, 'aws_session_token': '', 'onedrive_domain': '', @@ -56,6 +57,7 @@ class Settings: if not key.startswith('opendal_') and isinstance(default_value[key], int): value = int(value) default_value[key] = value + # 更新self for key, value in default_value.items(): self.__setattr__(key, value) @@ -76,5 +78,4 @@ class Settings: def items(self): return self.__dict__.items() - -settings = Settings() +settings = Settings() \ No newline at end of file diff --git a/core/storage.py b/core/storage.py index 77406cd..855cf17 100644 --- a/core/storage.py +++ b/core/storage.py @@ -92,13 +92,16 @@ class S3FileStorage(FileStorageInterface): self.access_key_id = settings.s3_access_key_id self.secret_access_key = settings.s3_secret_access_key self.bucket_name = settings.s3_bucket_name - self.endpoint_url = settings.s3_endpoint_url + self.s3_hostname = settings.s3_hostname + self.endpoint_url = settings.s3_endpoint_url or f'https://{self.s3_hostname}' self.aws_session_token = settings.aws_session_token self.proxy = settings.s3_proxy - self.session = aioboto3.Session( - aws_access_key_id=self.access_key_id, - aws_secret_access_key=self.secret_access_key, - ) + self.session = aioboto3.Session(aws_access_key_id=self.access_key_id, aws_secret_access_key=self.secret_access_key) + if not settings.s3_endpoint_url: + self.endpoint_url = f'https://{self.s3_hostname}' + else: + # 如果提供了 s3_endpoint_url,则优先使用它 + self.endpoint_url = settings.s3_endpoint_url async def save_file(self, file: UploadFile, save_path: str): async with self.session.client("s3", endpoint_url=self.endpoint_url, aws_session_token=self.aws_session_token) as s3: diff --git a/fcb-fronted/src/views/Admin/SettingView.vue b/fcb-fronted/src/views/Admin/SettingView.vue index 0d5745e..501e1f1 100644 --- a/fcb-fronted/src/views/Admin/SettingView.vue +++ b/fcb-fronted/src/views/Admin/SettingView.vue @@ -46,6 +46,9 @@ + + + @@ -104,6 +107,7 @@ const config = ref({ aws_session_token: '', s3_bucket_name: '', s3_endpoint_url: '', + s3_hostname: '', uploadCount: 1, errorMinute: 1, errorCount: 1,