update:存储改成单例模式,修复读取问题

This commit is contained in:
lan
2024-06-18 23:04:52 +08:00
parent 8afae1f567
commit e421ab93bc
4 changed files with 20 additions and 6 deletions
+9 -3
View File
@@ -2,6 +2,8 @@
# @Author : Lan
# @File : storage.py
# @Software: PyCharm
from typing import Optional
import aiohttp
import asyncio
from pathlib import Path
@@ -20,6 +22,12 @@ from fastapi.responses import FileResponse
class FileStorageInterface:
_instance: Optional['FileStorageInterface'] = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(FileStorageInterface, cls).__new__(cls, *args, **kwargs)
return cls._instance
async def save_file(self, file: UploadFile, save_path: str):
"""
@@ -79,7 +87,7 @@ class SystemFileStorage(FileStorageInterface):
return await get_file_url(file_code.code)
async def get_file_response(self, file_code: FileCodes):
file_path = file_storage.root_path / await file_code.get_file_path()
file_path = self.root_path / await file_code.get_file_path()
if not file_path.exists():
return APIResponse(code=404, detail='文件已过期删除')
return FileResponse(file_path, filename=file_code.prefix + file_code.suffix)
@@ -288,5 +296,3 @@ storages = {
'onedrive': OneDriveFileStorage,
'opendal': OpenDALFileStorage,
}
file_storage: FileStorageInterface = storages[settings.file_storage]()
+3 -1
View File
@@ -8,11 +8,13 @@ from tortoise.expressions import Q
from apps.base.models import FileCodes
from apps.base.utils import error_ip_limit, upload_ip_limit
from core.storage import file_storage
from core.settings import settings
from core.storage import FileStorageInterface, storages
from core.utils import get_now
async def delete_expire_files():
file_storage: FileStorageInterface = storages[settings.file_storage]()
while True:
try:
await error_ip_limit.remove_expired_ip()