You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
report_app/app/tools/verification_files.py

70 lines
2.5 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from fastapi import HTTPException
import re
import os
import logging
import shutil
from app.tools.doc2docx import doc2docx
# # word上传格式要求
# ALLOWED_EXTENSIONS_DOC = {
# 'application/msword',
# 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
# }
#
# # excel上传格式要求
# ALLOWED_EXTENSIONS_EXCEL = {
# 'application/vnd.ms-excel',
# 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
# }
# 获取日志记录器
logger = logging.getLogger(__name__)
# 验证上传的文件是否符合要求
def verification_files(file, UPLOAD_DIR, file_type, exception_type):
try:
# 检查文件类型
if file.content_type not in file_type:
raise HTTPException(status_code=400, detail="文件类型不支持")
# 判断各个文件名是否符合该上传需求
# 如果文件名与实际需要的文件不匹配,则抛出异常
if not re.search(file.filename[3:11], exception_type):
raise HTTPException(status_code=400, detail=f"请传入{exception_type}")
# 先判断文件是否已经上传,如果已经上传,则删除旧的,保存新的
# 保存文件到对应的位置,判断是否已经存在相关文件,如果有,则删除旧的
if os.path.exists(UPLOAD_DIR) and len(os.listdir(UPLOAD_DIR)) > 0:
for file_name in os.listdir(UPLOAD_DIR):
if re.search(file_name[3:11], exception_type):
os.remove(os.path.join(UPLOAD_DIR, file_name))
logger.info(f"删除旧文件{file_name}")
# 不管是不是有文件,都走这一步
logger.info(f"开始上传{exception_type}")
# 如果文件夹不存在,则新建
if not os.path.exists(UPLOAD_DIR):
os.makedirs(UPLOAD_DIR)
file_path = os.path.join(UPLOAD_DIR, file.filename)
with open(file_path, "wb") as buffer:
shutil.copyfileobj(file.file, buffer)
# 如果上传为doc需要转成docx
if file_path.endswith(".doc"):
doc2docx(file_path)
logger.info(f"文件{file.filename}格式转换为docx成功")
# elif file_path.endswith('.xls'):
#
# xls2xlsx(file_path)
# logger.info(f'文件{file.filename}格式转换为xlsx成功')
except Exception as e:
logger.error(f"文档格式校验失败:{e}")
raise HTTPException(status_code=500, detail=f"文档格式校验失败{e}")