修改文件上传逻辑
This commit is contained in:
parent
f789c60a3e
commit
d66859966b
|
@ -9,6 +9,7 @@ from Utils.SqlAlchemyUtils import get_db
|
||||||
from Schemas import FileSechemas
|
from Schemas import FileSechemas
|
||||||
from Utils.AuthUtils import token_data_depend
|
from Utils.AuthUtils import token_data_depend
|
||||||
from base64 import b64decode
|
from base64 import b64decode
|
||||||
|
|
||||||
router = APIRouter(prefix="/api/daily/file", tags=["文件"])
|
router = APIRouter(prefix="/api/daily/file", tags=["文件"])
|
||||||
allow_file_type = {
|
allow_file_type = {
|
||||||
'image',
|
'image',
|
||||||
|
@ -21,17 +22,21 @@ allow_file_type = {
|
||||||
@router.post('/file_upload', response_model=FileSechemas.UserFileInfo, summary='文件上次')
|
@router.post('/file_upload', response_model=FileSechemas.UserFileInfo, summary='文件上次')
|
||||||
def file_upload(name: str = Header(None), file: UploadFile = File(...),
|
def file_upload(name: str = Header(None), file: UploadFile = File(...),
|
||||||
db: Session = Depends(get_db), token_data: TokenData = Depends(token_data_depend)):
|
db: Session = Depends(get_db), token_data: TokenData = Depends(token_data_depend)):
|
||||||
|
file_org_name = file.filename
|
||||||
if name:
|
if name:
|
||||||
name=b64decode(name.encode('utf-8')).decode('utf-8')
|
file_org_name = b64decode(name.encode('utf-8')).decode('utf-8')
|
||||||
mime_type = file.content_type
|
mime_type = file.content_type
|
||||||
common_type, file_type = file.content_type.split('/')
|
common_type, file_type = file.content_type.split('/')
|
||||||
|
file_type_end = ''
|
||||||
|
if '.' in file_org_name:
|
||||||
|
file_type_end = '.' + file_org_name.split('.')[-1].lower()
|
||||||
if common_type not in allow_file_type:
|
if common_type not in allow_file_type:
|
||||||
raise Exception('不允许上传该类型文件')
|
raise Exception('不允许上传该类型文件')
|
||||||
content_start = file.file.read(1024)
|
content_start = file.file.read(1024)
|
||||||
file_md = file_md5(content_start)
|
file_md = file_md5(content_start)
|
||||||
save_path = Path(f"static_data/upload_files/{common_type}/{file_type}")
|
save_path = Path(f"static_data/upload_files/{common_type}/{file_type}")
|
||||||
file_save_path = save_path / file_md
|
file_save_path = save_path / (file_md + file_type_end)
|
||||||
file_url = f'/static_data/upload_files/{common_type}/{file_type}/{file_md}'
|
file_url = f'/static_data/upload_files/{common_type}/{file_type}/{file_md + file_type_end}'
|
||||||
if not os.path.exists(save_path):
|
if not os.path.exists(save_path):
|
||||||
os.makedirs(save_path)
|
os.makedirs(save_path)
|
||||||
user_file = FileCrud.get_file_by_md(db, file_md)
|
user_file = FileCrud.get_file_by_md(db, file_md)
|
||||||
|
@ -46,7 +51,7 @@ def file_upload(name: str = Header(None), file: UploadFile = File(...),
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
user_file = FileCrud.add_file(db,
|
user_file = FileCrud.add_file(db,
|
||||||
FileSechemas.UserFileCreate(md=file_md, file_name=name or file.filename,
|
FileSechemas.UserFileCreate(md=file_md, file_name=file_org_name,
|
||||||
mime_type=mime_type,
|
mime_type=mime_type,
|
||||||
user_id=token_data.email, common_type=common_type,
|
user_id=token_data.email, common_type=common_type,
|
||||||
file_url=file_url))
|
file_url=file_url))
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
from fastapi import APIRouter, Depends, HTTPException
|
from fastapi import APIRouter, Depends, HTTPException
|
||||||
|
from pydantic import BaseModel
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from Models.DepartmentModel import Department
|
from Models.DepartmentModel import Department
|
||||||
from Models.PostModel import Post
|
from Models.PostModel import Post
|
||||||
|
from Models.UserModel import User
|
||||||
from Schemas import UserSchemas
|
from Schemas import UserSchemas
|
||||||
from Crud import UserCrud, AuthCrud
|
from Crud import UserCrud, AuthCrud
|
||||||
from Schemas.UserSchemas import TokenData
|
from Schemas.UserSchemas import TokenData
|
||||||
|
@ -163,6 +165,66 @@ def refresh_token(token_data: TokenData = Depends(token_data_depend), db: Sessio
|
||||||
return {'token': token}
|
return {'token': token}
|
||||||
|
|
||||||
|
|
||||||
|
class GetLoginVerifyCodeReq(BaseModel):
|
||||||
|
account: str
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/get_login_verify_code", tags=["用户接口"], summary="获取登录验证码")
|
||||||
|
def get_login_verify_code(body: GetLoginVerifyCodeReq, db: Session = Depends(get_db)):
|
||||||
|
try:
|
||||||
|
account = body.account
|
||||||
|
user = db.query(User).filter(User.email == account).first()
|
||||||
|
if user:
|
||||||
|
account_type = 'email'
|
||||||
|
else:
|
||||||
|
user = db.query(User).filter(User.phone == account).first()
|
||||||
|
if user:
|
||||||
|
account_type = "phone"
|
||||||
|
else:
|
||||||
|
raise HTTPException(detail="账号未录入系统", status_code=303)
|
||||||
|
if account_type == 'email':
|
||||||
|
EmailVerifyCode.send_login_code(account)
|
||||||
|
if account_type == 'phone':
|
||||||
|
PhoneVerifyCode.send_code(account, PhoneVerifyType.login)
|
||||||
|
except HTTPException as e:
|
||||||
|
raise e
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
raise HTTPException(detail="验证码发送失败", status_code=403)
|
||||||
|
return {"msg": f"验证码已发送至{'邮箱' if account_type == 'email' else '手机'},请查看", "state": 1}
|
||||||
|
|
||||||
|
|
||||||
|
class LoginByVerifyCode(BaseModel):
|
||||||
|
account: str
|
||||||
|
code: str
|
||||||
|
|
||||||
|
|
||||||
|
@router.post('/login_by_verify_code', tags=["用户接口"], summary='验证码登录')
|
||||||
|
def login_by_verify_code(req: LoginByVerifyCode,
|
||||||
|
db: Session = Depends(get_db)):
|
||||||
|
account = req.account
|
||||||
|
if PhoneVerifyCode.check_code(account, req.code, PhoneVerifyType.login):
|
||||||
|
account_type = 'phone'
|
||||||
|
else:
|
||||||
|
if EmailVerifyCode.check_code(account, req.code, EmailVerifyType.login):
|
||||||
|
account_type = 'email'
|
||||||
|
else:
|
||||||
|
raise HTTPException(detail="验证码错误", status_code=303)
|
||||||
|
user = None
|
||||||
|
if account_type == 'phone':
|
||||||
|
user = db.query(User).filter(User.phone == account).first()
|
||||||
|
if account_type == 'email':
|
||||||
|
user = db.query(User).filter(User.email == account).first()
|
||||||
|
if not user:
|
||||||
|
raise HTTPException(detail="账号未录入系统", status_code=303)
|
||||||
|
auth_data = AuthCrud.get_user_auth(db, user.email)
|
||||||
|
user_data = user.to_dict()
|
||||||
|
user_data["auth_data"] = auth_data
|
||||||
|
token_data = TokenData(**user_data).dict()
|
||||||
|
token = create_token(token_data)
|
||||||
|
return {'msg': "成功", 'state': 1, 'data': {'token': token, 'user_info': user_data}}
|
||||||
|
|
||||||
|
|
||||||
@router.post("/get_user_by_department", tags=["用户接口"], summary="根据部门列表获取用户信息",
|
@router.post("/get_user_by_department", tags=["用户接口"], summary="根据部门列表获取用户信息",
|
||||||
response_model=UserSchemas.GetUserByDepartmentRes)
|
response_model=UserSchemas.GetUserByDepartmentRes)
|
||||||
def get_user_by_department(body: UserSchemas.GetUserByDepartmentReq, token_data: TokenData = Depends(token_data_depend),
|
def get_user_by_department(body: UserSchemas.GetUserByDepartmentReq, token_data: TokenData = Depends(token_data_depend),
|
||||||
|
|
Loading…
Reference in New Issue