Django - кодировать видео и аудио файлы только при изменении файла - PullRequest
0 голосов
/ 16 октября 2018

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

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

  1. Клиентское приложение загружает файл, думая, что REST API я разработал -- DONE
  2. Django сохраняет файл на Amazon S3. - DONE
  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

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

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете проверить обновление файла в 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() файл станет другим в базе данных и памяти, поэтому вы можете проверить обновление

...