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}"