我正在尝试在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?
但这不是一个更简单的解决方案吗?
...谢谢
答案 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
页面