获取AWS桶列表Boto / Boto3

时间:2018-03-16 09:38:29

标签: amazon-s3 boto boto3 tbucketlist

我开发了一个Tornado API,它可以获取AWS S3存储桶内容,下面是与Boto完美匹配的代码片段。但是,这对于某些不同位置的存储桶不起作用。

该方法返回一个列表(resp),其中包含文件名,大小和文件类型。

希望使用Boto3实现类似功能。尝试了很多,但Boto3方法返回带有完整路径的s3存储桶的所有内容。

def post(self):
    try:
        resp = []
        path = self.get_argument('path')
        bucket_name = self.get_argument('bucket_name')
        path_len = len(path)
        conn = S3Connection()
        bucket = conn.get_bucket(bucket_name)
        folders = bucket.list(path, "/")
        for folder in folders:
            if folder.name == path:
                continue
            if str(folder.name).endswith("/"):
                file_type = 'd'
                file_name = str(folder.name)[path_len:-1]
            else:
                _file_size = self.filesize(folder.size)
                file_type = 'f'
                file_name = str(folder.name)[path_len:]
            resp.append({"bucket": bucket_name, "path": path, "name": file_name, "type": file_type,
                         "size": _file_size if file_type == 'f' else ""})
        self.write(json.dumps(resp))

1 个答案:

答案 0 :(得分:0)

Razvan Tudorica用Bot3的Tornado的AsyncHTTPClient构建了Boto3上载和删除方法的小型替代品;他发表了关于这项工作的博客文章here,并将其代码发布在GitHub上。

原始的SO查询强调指出,提供的代码段“不适用于不同位置的存储桶”,在此特别感兴趣的是Razvan的注释:“ [他的]替换的主要思想是使用botocore来构建请求(AWS希望使用基于AWS区域和请求数据的不同算法对请求进行签名),并且仅将AsyncHTTPClient用于实际的异步调用。”

我希望Razvan的工作仍然对您或对其他研究类似工作的人(对我来说最近)有用。