Skip to content

Commit

Permalink
fix: 支持自定义s3协议region name和signature version,解决cloudflare r2文件取回问题
Browse files Browse the repository at this point in the history
  • Loading branch information
vastsa committed Apr 29, 2024
1 parent db7f26e commit 4a35305
Show file tree
Hide file tree
Showing 95 changed files with 18 additions and 421 deletions.
2 changes: 2 additions & 0 deletions core/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
's3_secret_access_key': '',
's3_bucket_name': '',
's3_endpoint_url': '',
's3_region_name': 'auto',
's3_signature_version': 's3v2',
's3_hostname': '',
's3_proxy': 0,
'aws_session_token': '',
Expand Down
15 changes: 8 additions & 7 deletions core/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import re
import sys
import aioboto3
import botocore
from botocore.config import Config
from fastapi import HTTPException, Response, UploadFile
from core.response import APIResponse
from core.settings import data_root, settings
Expand All @@ -20,8 +20,6 @@


class FileStorageInterface:
def __init__(self):
raise NotImplementedError

async def save_file(self, file: UploadFile, save_path: str):
"""
Expand Down Expand Up @@ -93,6 +91,8 @@ def __init__(self):
self.secret_access_key = settings.s3_secret_access_key
self.bucket_name = settings.s3_bucket_name
self.s3_hostname = settings.s3_hostname
self.region_name = settings.s3_region_name
self.signature_version = settings.s3_signature_version
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
Expand All @@ -104,17 +104,18 @@ def __init__(self):
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:
async with self.session.client("s3", endpoint_url=self.endpoint_url, aws_session_token=self.aws_session_token, region_name=self.region_name,
config=Config(signature_version=self.signature_version)) as s3:
await s3.put_object(Bucket=self.bucket_name, Key=save_path, Body=await file.read(), ContentType=file.content_type)

async def delete_file(self, file_code: FileCodes):
async with self.session.client("s3", endpoint_url=self.endpoint_url) as s3:
async with self.session.client("s3", endpoint_url=self.endpoint_url, region_name=self.region_name, config=Config(signature_version=self.signature_version)) as s3:
await s3.delete_object(Bucket=self.bucket_name, Key=await file_code.get_file_path())

async def get_file_response(self, file_code: FileCodes):
try:
filename = file_code.prefix + file_code.suffix
async with self.session.client("s3", endpoint_url=self.endpoint_url) as s3:
async with self.session.client("s3", endpoint_url=self.endpoint_url, region_name=self.region_name, config=Config(signature_version=self.signature_version)) as s3:
link = await s3.generate_presigned_url('get_object', Params={'Bucket': self.bucket_name, 'Key': await file_code.get_file_path()}, ExpiresIn=3600)
tmp = io.BytesIO()
async with aiohttp.ClientSession() as session:
Expand All @@ -133,7 +134,7 @@ async def get_file_url(self, file_code: FileCodes):
if self.proxy:
return await get_file_url(file_code.code)
else:
async with self.session.client("s3", endpoint_url=self.endpoint_url) as s3:
async with self.session.client("s3", endpoint_url=self.endpoint_url, region_name=self.region_name, config=Config(signature_version=self.signature_version)) as s3:
result = await s3.generate_presigned_url('get_object', Params={'Bucket': self.bucket_name, 'Key': await file_code.get_file_path()}, ExpiresIn=3600)
return result

Expand Down
1 change: 0 additions & 1 deletion fcb-fronted/dist/assets/AboutView-5fb9b43c.js

This file was deleted.

1 change: 0 additions & 1 deletion fcb-fronted/dist/assets/AdminView-081d8e6f.css

This file was deleted.

1 change: 0 additions & 1 deletion fcb-fronted/dist/assets/AdminView-9c49238c.js

This file was deleted.

1 change: 0 additions & 1 deletion fcb-fronted/dist/assets/CardTools-1689f95b.css

This file was deleted.

Loading

0 comments on commit 4a35305

Please sign in to comment.