Files
NetworkDeviceManagementSystem/backend/storage/validators.py
QuangMinh_123 2683cdb882 Device
2026-05-27 13:50:27 +07:00

49 lines
1.4 KiB
Python

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. Có file được gửi lên không
2. File có tên không
3. File có extension không
4. Extension có hợp lệ không
5. File có 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