48 lines
1.7 KiB
Python
48 lines
1.7 KiB
Python
import os
|
|
from pathlib import Path
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, UploadFile, File
|
|
from sqlalchemy.orm import Session
|
|
|
|
from Crud import UserCrud
|
|
from Schemas import UserSchemas
|
|
from Schemas.UserSchemas import TokenData
|
|
from Utils.AuthUtils import token_data_depend
|
|
from Utils.CommonUtils import file_md5
|
|
from Utils.SqlAlchemyUtils import get_db
|
|
|
|
router = APIRouter(
|
|
tags=["用户操作"],
|
|
prefix="/api/user",
|
|
dependencies=[Depends(token_data_depend)]
|
|
)
|
|
|
|
|
|
@router.post("/get_user_info", summary="获取用户信息", response_model=UserSchemas.UserInfo)
|
|
def get_user_info(token_data: TokenData = Depends(token_data_depend), db: Session = Depends(get_db)):
|
|
user_id = token_data.id
|
|
user = UserCrud.get_user_by_id(db, user_id)
|
|
if not user:
|
|
raise HTTPException(404, detail="未找到用户信息")
|
|
user_info = user.as_info()
|
|
return user_info
|
|
|
|
|
|
@router.post('/avatar_upload',summary="用户头像上传")
|
|
def avatar_upload(file: UploadFile = File(...), token_data: TokenData = Depends(token_data_depend)):
|
|
if file.content_type not in ['image/png', 'image/jpeg']:
|
|
raise Exception('图片格式应为png和jpg')
|
|
contents = file.file.read(1024 * 201)
|
|
if len(contents) > 1024 * 200:
|
|
raise Exception("文件大小不能大于200kb")
|
|
save_path = Path("static_data/user/avatar")
|
|
if not os.path.exists(save_path):
|
|
os.makedirs(save_path)
|
|
file_md = file_md5(contents)
|
|
if not os.path.exists(save_path / file_md):
|
|
with open(save_path / file_md, 'wb') as f:
|
|
f.write(contents)
|
|
file_url_path = f"/static_data/user/avatar/{file_md}"
|
|
UserCrud.change_user_info(token_data.id, {'avatar': file_url_path})
|
|
return {"msg": "上传成功", "state": 1}
|