48 lines
1.1 KiB
Python
48 lines
1.1 KiB
Python
from fastapi import UploadFile, File, HTTPException
|
|
|
|
from config.rustfs import s3
|
|
|
|
ALLOWED_IMAGE_TYPES = [
|
|
# 图片
|
|
"image/jpeg",
|
|
"image/png",
|
|
"image/gif",
|
|
"image/webp",
|
|
"image/svg+xml",
|
|
# 视频
|
|
"video/mp4",
|
|
"video/mpeg",
|
|
"video/quicktime",
|
|
"video/x-msvideo",
|
|
"video/webm",
|
|
"video/x-matroska",
|
|
"video/ogg",
|
|
]
|
|
|
|
BUCKET = 'family'
|
|
NGINX_PROXY = 'rustfs'
|
|
|
|
|
|
async def upload_file(md5: str, file: UploadFile = File(...)) -> str:
|
|
# 校验文件类型
|
|
if file.content_type not in ALLOWED_IMAGE_TYPES:
|
|
raise HTTPException(
|
|
status_code=400,
|
|
detail="只允许上传图片或视频文件 (JPEG, PNG, GIF, WEBP, SVG, MP4, MOV, AVI, WEBM, MKV, OGV)"
|
|
)
|
|
|
|
file_ext = file.filename.split('.')[-1]
|
|
unique_filename = f"{md5}.{file_ext}"
|
|
|
|
file_content = await file.read()
|
|
|
|
# 上传到S3
|
|
s3.put_object(
|
|
Bucket=BUCKET,
|
|
Key=unique_filename,
|
|
Body=file_content,
|
|
ContentType=file.content_type
|
|
)
|
|
|
|
# 返回文件url
|
|
return f"{NGINX_PROXY}/{BUCKET}/{unique_filename}" |