2

我在 Amazon S3 存储桶中有许多视频,我想在我的网站上将它们显示为列表。单击列表中的任何项目将下载视频。

我正在使用 Python 和 Flask。我目前在屏幕上显示 url 和名称,但我无法下载它们。在 python 中,只在 S3 键上使用“get_file”函数会很简单,但我不知道如何调用这个方法。看起来应该很简单,但我可能不得不在 html 'onClick' 中使用 javascript。

我是 javascript 新手,所以这可能是一个选项,但我最想访问内置的 boto 方法。

目前我有钥匙:

from boto.s3.connection import S3Connection

def get_video_keys():
key = local_settings.local_vars['AWS_ACCESS_KEY_ID']
skey = local_settings.local_vars['AWS_SECRET_ACCESS_KEY']
bucket = local_settings.local_vars['VIDEO_BUCKET_NAME']

conn = S3Connection(key, skey)
mybucket = conn.get_bucket(bucket)
keys = mybucket.get_all_keys()
return keys

还有一些使用 Jinja2 模板显示它们的 html。

{% for key in keys %}
        <li><div><a href="{{ key.generate_url(3600) }}"> {{ key.name }}</a></div></li>
{% endfor %}

在线查看只找到了下载所有文件的方法,而不是响应点击事件进行下载。

2013 年 9 月 5 日更新

这实际上在 Firefox 上运行良好,但在 Chrome/Chromium 中没有做任何事情。

4

2 回答 2

1

您可以使用generate_url生成一个用于下载的 url。

例如:

urls = [key.generate_url(100) for key in keys]

然后你会得到一些 100 秒后过期的 url。

编辑

当您有一些特殊字符时,请使用 urllib.quote 转义它们:

new_urls = [urllib.quote(url) for url in urls]
于 2013-05-08T10:20:21.507 回答
0

您可以在服务器上安装s3fs以将 S3 存储桶“挂载”为文件系统。s3fs 是用于 amazon-S3的Fuse的实现

于 2013-05-08T10:06:42.427 回答