feat(): Criado função que sanitiza nomes de arquivos
This commit is contained in:
parent
188c7a4c94
commit
5d37a3d2a1
3 changed files with 25 additions and 2 deletions
21
actions/sanitize/sanitize_filename.py
Normal file
21
actions/sanitize/sanitize_filename.py
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import unicodedata
|
||||
import re
|
||||
|
||||
|
||||
# Remove caracteres inválidos de nomes de arquivos
|
||||
def sanitize_filename(filename: str) -> str:
|
||||
# Normaliza Unicode (NFC)
|
||||
filename = unicodedata.normalize("NFKD", filename)
|
||||
filename = filename.encode("ascii", "ignore").decode("ascii")
|
||||
|
||||
# Remove caracteres inválidos
|
||||
filename = re.sub(r'[<>:"/\\|?*\x00-\x1F]', "", filename)
|
||||
|
||||
# Substitui espaços múltiplos por um espaço
|
||||
filename = re.sub(r"\s+", " ", filename).strip()
|
||||
|
||||
# Garante extensão
|
||||
if "." not in filename:
|
||||
filename += ".pdf"
|
||||
|
||||
return filename
|
||||
|
|
@ -5,6 +5,7 @@ from sqlalchemy import func
|
|||
from sqlalchemy.orm import Session
|
||||
from database.mysql import SessionLocal, get_database_settings
|
||||
from actions.file.save_file_from_base64 import save_file_from_base64
|
||||
from actions.sanitize.sanitize_filename import sanitize_filename
|
||||
from packages.v1.administrativo.models.ato_principal_model import AtoPrincipal
|
||||
from packages.v1.administrativo.models.ato_documento_model import AtoDocumento
|
||||
from packages.v1.administrativo.schemas.ato_documento_schema import (
|
||||
|
|
@ -75,7 +76,7 @@ class SaveMultipleRepository:
|
|||
unique_id = uuid.uuid4().hex[:8]
|
||||
file_name = f"documento_{timestamp}_{unique_id}.pdf"
|
||||
else:
|
||||
file_name = doc_schema.nome_documento
|
||||
file_name = sanitize_filename(doc_schema.nome_documento)
|
||||
|
||||
# Salva o arquivo físico
|
||||
file_url_path = save_file_from_base64(
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ from sqlalchemy import func
|
|||
from sqlalchemy.orm import Session # Importação para tipagem da session
|
||||
from database.mysql import SessionLocal, get_database_settings
|
||||
from actions.file.save_file_from_base64 import save_file_from_base64
|
||||
from actions.sanitize.sanitize_filename import sanitize_filename
|
||||
from packages.v1.administrativo.models.ato_principal_model import AtoPrincipal
|
||||
from packages.v1.administrativo.models.ato_parte_model import AtoParte
|
||||
from packages.v1.administrativo.models.ato_documento_model import AtoDocumento
|
||||
|
|
@ -140,7 +141,7 @@ class SaveMultipleRepository:
|
|||
unique_id = uuid.uuid4().hex[:8] # reduzido para ficar mais limpo
|
||||
file_name = f"documento_{timestamp}_{unique_id}{file_ext}"
|
||||
else:
|
||||
file_name = doc.nome_documento
|
||||
file_name = sanitize_filename(doc.nome_documento)
|
||||
|
||||
file_url_path = save_file_from_base64(
|
||||
base64_content, file_name, new_ato_id, UPLOAD_DIR, GROUP_SIZE
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue