Files
NetworkDeviceManagementSystem/backend/storage/validators.py

49 lines
1.4 KiB
Python
Raw Normal View History

2026-05-27 13:50:27 +07:00
ALLOWED_IMAGE_EXTENSIONS = {"svg", "png", "jpg", "jpeg", "webp"}
MAX_FILE_SIZE_MB = 5
MAX_FILE_SIZE_BYTES = MAX_FILE_SIZE_MB * 1024 * 1024
def validate_image_file(file):
"""
Validate file ảnh trước khi upload lên MinIO/S3.
Hàm này kiểm tra:
1. file được gửi lên không
2. File tên không
3. File extension không
4. Extension hợp lệ không
5. File vượt quá dung lượng cho phép không
Trả về:
- extension của file nếu hợp lệ
Raise:
- ValueError nếu file không hợp lệ
"""
if file is None:
raise ValueError("No file uploaded")
if file.filename == "":
raise ValueError("Filename is empty")
if "." not in file.filename:
raise ValueError("File must have an extension")
extension = file.filename.rsplit(".", 1)[1].lower()
if extension not in ALLOWED_IMAGE_EXTENSIONS:
raise ValueError("Invalid image type. Allowed: svg, png, jpg, jpeg, webp")
# Di chuyển con trỏ file tới cuối để đo dung lượng file.
file.seek(0, 2)
file_size = file.tell()
# Đưa con trỏ file về đầu để lát nữa upload không bị mất dữ liệu.
file.seek(0)
if file_size > MAX_FILE_SIZE_BYTES:
raise ValueError(f"File size must be less than {MAX_FILE_SIZE_MB}MB")
return extension