我正在开发一个用户可以上传视频的应用。后端将它们发送到S3并进行回放我从S3生成一个自动过期URL,我必须将其传递给Cloudfront以便流回用户。
我在boto
中使用Django
,我有80%的代码工作,直到我必须链接cloudfront的部分。私有S3网址生成并且运行正常。
s3_conn = S3Connection(
aws_access_key_id = settings.CONFIG.AWS_ACCESS_KEY_ID,
aws_secret_access_key = settings.CONFIG.AWS_SECRET_ACCESS_KEY,
is_secure = True
)
video_url = s3_conn.generate_url(
60,
'GET',
bucket = settings.CONFIG.AWS_VIDEO_STORAGE_BUCKET_NAME,
key = self.premium_video_url,
force_http = True
)
origin = cloudfront.origin.S3Origin( "{}.s3.amazonaws.com".format( settings.CONFIG.AWS_VIDEO_STORAGE_BUCKET_NAME ) )
cloudf = boto.connect_cloudfront( settings.CONFIG.AWS_ACCESS_KEY_ID, settings.CONFIG.AWS_SECRET_ACCESS_KEY )
stream_distributions = cloudf.get_all_streaming_distributions()
if not len(stream_distributions):
distro = cloudf.create_streaming_distribution( origin = origin, enabled = True, comment = 'Video streaming distribution' )
else:
distro = stream_distributions[0]
return distro.create_signed_url(
video_url,
expire_time = int( time.time() + 3000 ),
private_key_file = self.premium_video_url
)
有问题的行:
distro = stream_distributions[0]
会返回StreamingDistributionSummary
而不是真正的分发对象或其他任何内容:'StreamingDistributionSummary' object has no attribute 'create_signed_url'
此外,返回代码可能会遗漏某些内容。
我有各种各样的问题找到一个不错的例子,因为boto
最近似乎已经发生了很大变化,所有现有的例子都不再有效。