Device
This commit is contained in:
49
backend/storage/validators.py
Normal file
49
backend/storage/validators.py
Normal file
@@ -0,0 +1,49 @@
|
||||
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
|
||||
Reference in New Issue
Block a user