为AWS S3

时间:2018-06-08 16:05:01

标签: amazon-s3 boto3

我正在尝试在ASW S3上模拟我的存储桶的目录列表。目前我正在创建" index.html"本地如下:

    for root, dirs, files in os.walk(job_dir):
    objects = []

    for obj in dirs+files:
        m_time_epoch = os.stat(os.path.join(path,obj)).st_mtime
        mtime = datetime.fromtimestamp(m_time_epoch).strftime('%c')
        size = os.stat(os.path.join(path,obj)).st_size
        type = 'dir' if os.path.isdir(os.path.join(path,obj)) else 'file'
        objects.append({'name': obj,
                        'mtime': mtime,
                        'size': size,
                        'type': type})

    generate_index(objects, dest_path)

然后将它与目标路径(存储桶URL)一起传递给将创建" index.html"的函数。使用jinja模板。

有更好的方法吗?我想避免使用JavaScript。我做了一些谷歌搜索,但到目前为止没有找到一个优雅的解决方案。

" os.walk"最简单的选择是什么?使用boto3 python客户端?

我找到了一些代码段,例如在这里:

How do I list directory contents of an S3 bucket using Python and Boto3?

但这不是一个更简单的解决方案吗?

...谢谢

1 个答案:

答案 0 :(得分:1)

我建议在boto3中使用list_objects_v2方法。

import boto3

s3 = boto3.client('s3')

paginator = s3.get_paginator('list_objects_v2')

response_iterator = paginator.paginate(
    Bucket='MyBucket'
)

objects = []
for response in response_iterator:
    for r in response['Contents']:
        print("File is called {}".format(r['Key']))

在遍历存储桶中的对象时,您可以构建一个可以传递给Jinja模板的对象来创建index.html页面