Files
wehub-resource-sync 1443d3fdf9
Ruff Format Check / Ruff Format & Lint (push) Failing after 7m39s
Deploy VitePress site to Pages / build (push) Failing after 9m11s
Deploy VitePress site to Pages / Deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:26 +08:00

46 lines
1.4 KiB
Python

"""
MinIO 存储工具函数
简化的存储操作辅助函数
"""
import os
import uuid
from fastapi import UploadFile
from yuxi.utils.upload_utils import read_upload_with_limit
from .client import aupload_file_to_minio
def get_file_size(file_path: str) -> int:
"""获取文件大小"""
return os.path.getsize(file_path)
def generate_unique_filename(original_name: str) -> str:
"""生成唯一的文件名"""
name_parts = original_name.rsplit(".", 1)
base_name = name_parts[0] if len(name_parts) == 2 else original_name
extension = f".{name_parts[1]}" if len(name_parts) == 2 else ""
return f"{base_name}_{uuid.uuid4().hex[:8]}{extension}"
async def upload_image_to_minio(
upload: UploadFile,
*,
object_prefix: str,
max_size_bytes: int,
too_large_message: str,
) -> str:
if not upload.content_type or not upload.content_type.startswith("image/"):
raise ValueError("只能上传图片文件")
file_content = await read_upload_with_limit(
upload,
max_size_bytes=max_size_bytes,
too_large_message=too_large_message,
)
file_extension = upload.filename.rsplit(".", 1)[-1].lower() if upload.filename and "." in upload.filename else "jpg"
object_name = f"{object_prefix.strip('/')}/{uuid.uuid4()}.{file_extension}"
return await aupload_file_to_minio("public", object_name, file_content)