django - Django - 仅在文件更改时编码视频和音频文件
问题描述
我django-storages
用于在 Amazon S3 上存储媒体文件。我使用 boto3 开发了一个接口,以使用 Elastic Transcoder 对视频或音频文件进行编码。此外,对于视频文件,我将添加仍然使用 Elastic Transcoder 的水印徽标。
流程如下:
- 客户端应用程序通过我开发的 REST API 上传文件——完成
- Django 将文件存储在 Amazon S3 上——完成
- 如果是视频或音频,Django 将启动 Amazon Elastic Transcoder Job 来对文件进行编码。输出文件将添加到同一个 S3 存储桶上的不同路径。
- 使用 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
是否有更好的方法仅在文件更改时才启动视频或音频文件的编码过程?
解决方案
您可以在models.py中查看文件更新:</p>
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()
的文件在数据库和内存中不同,所以你可以检查更新
推荐阅读
- reactjs - axios HTTP DELETE请求返回415错误
- data-visualization - 有人知道如何共享 google colab 文档,以便人们可以运行笔记本但看不到实际代码吗?
- java - 不了解 Android Mediaplayer 同步
- r - 对数据集中的几对使用 cpquery 函数
- sql - How to retrieve a particular number from the string XXXX-XXXX-XXX-XXXX through SQL
- python - 无法使用 python 检索所有 XML 数据
- search - Fuse.js:完全匹配的名称
- aws-amplify - snsdev-dev 已存在于堆栈中
- c# - 拆分由任何非数字字符串分隔的数字
- python - 格式化分类报告以显示不同的指标