@@ -10,7 +10,7 @@ import requests from django.core.files import File from messages.models import Message -from ml_model.exceptions import FileNotProvided +from ml_model.exceptions import CorruptedFileError, FileExtensionNotSupported, FileNotProvided from ml_model.services.base import SimpleService from ml_model.tasks import replicate_run @@ -50,9 +50,13 @@ class Wan(SimpleService): raise InsufficientBalance(balance, cost) if not input_message.file: raise FileNotProvided('Image') - kind = filetype.guess(input_message.file.read(20)) - mime = kind.mime if kind else 'application/octet-stream' + kind = filetype.guess(input_message.file.read(50)) + if not kind: + raise CorruptedFileError + mime = kind.mime input_message.file.seek(0) + if kind.extension.upper() not in (available_extensions := ('JPG', 'JPEG', 'PNG', 'WEBP')): + raise FileExtensionNotSupported(available_extensions) image = f'data:{mime};base64,{base64.b64encode(input_message.file.read()).decode("utf-8")}' input_message.file.close() callback_data = dict(