如何从S3存储桶AWS中转储所有图像URL?

时间:2018-06-24 19:42:34

标签: amazon-s3 boto3

我正在尝试从AWS上的一个S3存储桶中获取所有图像URL的转储。我该怎么做?我一直在尝试使用下面的代码,但始终收到错误's3.ServiceResource' object has no attribute 'generate_presigned_url',另一个问题是,如果我传递图像名称,则此代码仅获取一个图像的URL。我不想这样做,因为我想为应用程序动态更改图像。

import boto3

s3 = boto3.resource('s3')

url = s3.generate_presigned_url('get_object',
                                Params={
                                    'Bucket': 'mybucket',
                                    'Key': 'upload/nocturnes.png',
                                },                                  
                                ExpiresIn=3600)
print url

编辑:

此代码为我提供了存储桶中的密钥列表,但没有列出密钥的URL。

import boto3
s3 = boto3.resource('s3')

my_bucket = s3.Bucket('bucket name')

for file in my_bucket.objects.all():
    a= file.key

2 个答案:

答案 0 :(得分:1)

这对我有用。

import boto3

s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')

bucket_name = 'bucket_name'
my_bucket = s3_resource.Bucket(bucket_name)


for file in my_bucket.objects.all():
    params = {'Bucket': bucket_name, 'Key': file.key}
    url = s3_client.generate_presigned_url('get_object', params)
    print url

答案 1 :(得分:0)

对于包含公共对象的存储桶:

import boto3

s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')

bucket_name = 'bucket_name'
my_bucket = s3_resource.Bucket(bucket_name)

res = []
for file in bucket.objects.all():
    url = f'https://{bucket_name}.s3.amazonaws.com/{file.key}'
    res.append(url)
    print(url)