我正在尝试从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
答案 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)