视频通过基于Django的API上传到S3

时间:2016-04-21 16:40:24

标签: django heroku django-rest-framework tastypie

我正在创建一个托管在heroku上的简单API,用于处理当前使用基于Django的API的数据的远程客户端(移动应用程序)的视频上传。

我需要视频文件名/网址既模糊又独特。

我可以采取几种方法:

1)请求基于Django的API为我提供一个独特且模糊的文件名,将视频直接上传到具有该文件名的S3,然后将上传状态更新发布到API。

2)从移动应用程序直接将视频上传到S3,向API发送带有视频详细信息的请求,然后生成一个任务,重命名S3上的视频文件名,并更新我的Django模型中的视频网址属性。

3)将视频直接发布到API,该API将处理命名文件并上传到S3。

在将来上传到S3之前我需要处理视频的可能情况下,第一种和第二种方法需要服务器下载已经上传到S3的视频,处理它和然后重新上传到S3。

在这种情况下推荐的架构是什么?

1 个答案:

答案 0 :(得分:1)

您有几个设计选项。

  1. 如果您在处理之前直接上传到S3,这里有一篇关于使用python直接上传到您的存储桶的文章: https://devcenter.heroku.com/articles/s3-upload-python

    您需要一个单独的任务服务器(或Lambda)来触发单独的作业来处理您的视频处理。这样,您的网站仍然无阻碍且快速。您希望利用队列(AWS中的SQS)进行扩展。

  2. 或者,您的网络服务器可以完成所有工作:下载,处理和上传s3。

  3. 第二种方法更直接,但也不会处理Web服务器负载,扩展也会更加昂贵。

    我建议第一种方法允许s3处理你的上传,Lambda和SQS来处理你的处理,你的网络服务器仍然很轻。更多的发展,因为它不是线性的,但应该更便宜,并为用户提供更好的性能和响应时间。