使用存储在aws s3存储上的文件 - 媒体存储作为django视图中进程的输入

时间:2017-07-28 09:22:58

标签: django amazon-web-services amazon-s3 amazon-ec2

我正在尝试在aws中制作我的django应用程序,我使用弹性beanstalk来部署它,以便创建ec2实例并连接到rds数据库mysql实例,并使用amazon s3存储中的存储桶来存储我的媒体文件就可以了。

当用户上传视频时,它会在s3中存储为:“https://bucketname.s3.amazonaws.com/media/videos/videoname.mp4”。 在django developpement模式中,我使用视频文件名作为批处理脚本的输入,该脚本将视频作为输出。

我在发展模式中的观点如下:

def get(request):
# get video
    var = Video.objects.order_by('id').last()
    v = '/home/myproject/media/videos/' + str(var)
# call process
    subprocess.call("./step1.sh %s" % (str(v)), shell=True)
    return render(request, 'endexecut.html')

在aws(问题)的生产模式中,我试过:

v = 'https://bucketname.s3.amazonaws.com/media/videos/' + str(var)

但批处理过程不接受url作为处理的输入。

如何在我的视图中使用s3存储桶中的视频文件进行处理?提前谢谢。

1 个答案:

答案 0 :(得分:1)

你不应该对该字符串进行硬编码。这有几个问题:

  1. " bucketname"不是你的桶的名称。如果可以的话,你应该使用你的桶的名称。

  2. 您的媒体文件URl(在settings.py中)应该指向保存文件的存储区网址(如果配置得当)。所以你可以利用:

    video_path = settings.MEDIA_URL + video_name

  3. 我假设您正在使用s3boto来处理您的存储(虽然这不是先决条件,但它只会使您的存储处理变得更加智能,如果您从django应用程序推送到s3,则强烈推荐它)