Сайт на Django.
Зависимые пакеты:
django 3.0.5
djangorestframework 3.11.0
При аплоаде файлов с определенными названиями сериалайзер выдаёт невалидность. Например такое название крашит сериализацию "2 Sub Urban ft. Rei Ami - Freak (Рус Кавер Oxygen1um ft. Lil Key) ▶ Песня На Русском - Оксигениум Перевод Rus Cover.mp4" (Я понимаю, что название слишком "хитровыделанное", но ничего не могу поделать - пользователи такое пытаются загрузить)
Код сериалайзера
class ClipVideoFileSerializer(serializers.ModelSerializer):
"""Clip VideoFile Serializer"""
class Meta:
model = Clip
fields = "__all__"
read_only_fields = ('error', 'converted', 'is_playing', 'clip_duration',)
Код вьюхи
class ClipView(APIView):
"""Clip View"""
parser_classes = (MultiPartParser, FormParser, JSONParser)
object_serializer = ClipSerializer
object_get_serializer = ClipGetSerializer
video_file_serializer = ClipVideoFileSerializer
json_object_name = "clip"
"""
Часть несвязанного с проблемой кода скрыта
"""
def put(self, request):
if request.data.get(self.json_object_name):
""" Часть несвязанного с проблемой кода скрыта """
""" При аплоаде выполняется блок elif """
elif request.data.get("video_file") is not None and request.data.get("id") is not None:
instance = get_object_or_404(Clip.objects.all(), pk=request.data.get("id"))
""" Часть несвязанного с проблемой кода скрыта """
file_serializer = self.video_file_serializer(
instance=instance,
data=request.data,
partial=True
)
if file_serializer.is_valid():
""" Часть несвязанного с проблемой кода скрыта """
else:
data = request.data
return self.get(request, context={"detail": "update error", "id": data.get("id"),
"convertation_status": "error"})
else:
return self.get(request, context={"error": "bad request"})
"""
Часть несвязанного с проблемой кода скрыта
"""
Модель
class Clip(models.Model):
"""Clip"""
""" Часть несвязанного с проблемой кода скрыта """
name = models.CharField("Clip name", max_length=150, default="NoName")
video_file = models.FileField("Clip", upload_to="clips", null=True, blank=True)
""" Часть несвязанного с проблемой кода скрыта """
Если у файлов простые названия (например "video_bla_bla.mp4") то проблем с загрузкой не возникает.
Пытался при сохранении менять имя используя django-hashedfilenamestorage, но безрезультатно.
Есть возможность еще на фронте менять имя отправляемого файла, но это - костыль, ведь на бэке так и будет вероятность ошибки из-за имени.
Как мне решить эту проблему?