Django - кодировать видео и аудио файлы только при изменении файла

Я использую django-storages для хранения медиафайлов на Amazon S3. Я разработал интерфейс с использованием boto3 для использования Elastic Transcoder для кодирования видео или аудиофайлов. Также для видеофайлов я добавлю логотип водяного знака, используя Elastic Transcoder.

Поток следующий:

  1. Клиентское приложение загружает файл, используя REST API, который я разработал — ВЫПОЛНЕНО
  2. Django сохраняет файл на Amazon S3 — ГОТОВО
  3. Если это видео или аудио, Django запустит задание Amazon Elastic Transcoder для кодирования файла. Выходной файл будет добавлен по другому пути в том же сегменте S3.
  4. Используя Amazon SNS, Django получит уведомление, когда закодированный файл будет готов.

Для запуска процесса кодирования я думал использовать файл post_save. Таким образом, я мог проверить, загружен ли файл, а затем запустить Amazon Elastic Transcoder. Пример:

@receiver(post_save, sender=MyModel)
def encode_file(sender, instance, created, **kwargs):
    if instance.content_type in ['video'] and instance.file:
        encode_file(instance.file) # Launch Amazon Elastic Transcoder

Есть ли лучший способ запустить процесс кодирования только для видео или аудио файлов и только при изменении файла?


person Fabio    schedule 15.10.2018    source источник


Ответы (1)


Вы можете проверить обновление файла в models.py:

class MyModel(models.Model):
    ...

    def save(self, *args, **kwargs):
        if not self.id:
            pass # for create
        else:
            # update
            this = MyModel.objects.get(id=self.id)
            if this.file != self.file:
                encode_file(instance.file) # Launch Amazon Elastic Transcoder
        return super(MyModel, self).save(*args, **kwargs)

до того, как файл super().save() отличается в базе данных и памяти, поэтому вы можете проверить обновление

person Ykh    schedule 16.10.2018
comment
Что this.file != self.file сравнивает? - person Fabio; 16.10.2018
comment
Итак, django автоматически проверит содержимое файла, верно? - person Fabio; 16.10.2018