boto3 upload_fileobj只上传1000个对象到S3位置



我在s3位置有超过1050个json文件,其中包含一个字段'id'。我在这些json文件上循环使用get_object获取这些id。我将使用这些id,并与url一起传递,以获得另一个json响应,其中包含一个具有快照位置的字段,即链接到下载文件。我正在捕获下载的对象并使用s3_client.upload_fileobj(BytesIO(response.content), bucket_name, api_download_file_path + file_name)写入s3位置,但每次我期望1050时,我在目标s3位置只获得1000个csv文件。这是由于对upload_fileobj的任何限制吗?

完整代码在这里

result = s3_client.list_objects(Bucket=bucket_name, Prefix=api_target_read_path)
for res in result.get('Contents'):
data = s3_client.get_object(Bucket=bucket_name, Key=res.get('Key'))
contents = data['Body'].read().decode('utf-8')
json_data = json.loads(contents)
print(json_data['id'])
json_id = json_data['id']
geturl = inv_avail_get_api_url + json_id
response = requests.get(geturl, headers=headers)
print(response.text)
durl = response.json()["response"]["snapshotLocation"]
response = requests.get(durl)
segments = durl.rpartition('/')
file_name = str(segments[2]).split('?')[0]
print(file_name)
s3_client.upload_fileobj(BytesIO(response.content), bucket_name, api_download_file_path + file_name)
python

如果您试图一次获取超过1000个对象,则需要使用paginator类,如docs:

一些AWS操作返回的结果是不完整的,需要后续的请求才能获得整个结果集。发送后续请求以继续前一个请求的过程称为分页。例如,Amazon S3list_objects操作一次最多返回1000个对象必须发送后续请求,以便检索下一页的结果。

s3 = boto3.client('s3')
paginator = s3.get_paginator('list_objects_v2')
pages = paginator.paginate(Bucket='bucket', Prefix='prefix')
for page in pages:
for obj in page['Contents']:
print(obj['Size'])

相关内容

  • 没有找到相关文章

最新更新