From 1bca0e007b9210117b335d561c705571b38a9814 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,