如何使用 ruby gem 为 rails 分页 s3 存储桶查询?
How to paginate s3 bucket query using ruby gem for rails?
我有一个查询可以获取 S3 存储桶中的所有项目,如果该存储桶中有很多项目,则需要很长时间才能加载。
bucket.objects(prefix: 'path/to/items').collect(&:key)
根据 the docs,我发现可以限制该提取中的项目数。
bucket.objects(prefix: 'path/to/items').limit(10).collect(&:key)
但是,我没有看到此函数的任何偏移参数。知道如何使用它进行分页以便加载前几个结果不会花费这么长时间吗?
AWS 提供了一些示例来说明如何做到这一点 here。听起来您应该能够在 bucket.objects(prefix: 'path/to/items')
上调用 .each
来处理每个返回的页面。
自动分页:
s3 = Aws::S3::Client.new
s3.list_objects(bucket: 'aws-sdk').each do |response|
puts response.contents.map(&:key)
end
手动分页:
s3 = Aws::S3::Client.new
# Get the first page of data
response = s3.list_objects(bucket: 'aws-sdk')
# Get additional pages
while response.next_page? do
response = response.next_page
# Use the response data here...
puts response.contents.map(&:key)
end
我有一个查询可以获取 S3 存储桶中的所有项目,如果该存储桶中有很多项目,则需要很长时间才能加载。
bucket.objects(prefix: 'path/to/items').collect(&:key)
根据 the docs,我发现可以限制该提取中的项目数。
bucket.objects(prefix: 'path/to/items').limit(10).collect(&:key)
但是,我没有看到此函数的任何偏移参数。知道如何使用它进行分页以便加载前几个结果不会花费这么长时间吗?
AWS 提供了一些示例来说明如何做到这一点 here。听起来您应该能够在 bucket.objects(prefix: 'path/to/items')
上调用 .each
来处理每个返回的页面。
自动分页:
s3 = Aws::S3::Client.new
s3.list_objects(bucket: 'aws-sdk').each do |response|
puts response.contents.map(&:key)
end
手动分页:
s3 = Aws::S3::Client.new
# Get the first page of data
response = s3.list_objects(bucket: 'aws-sdk')
# Get additional pages
while response.next_page? do
response = response.next_page
# Use the response data here...
puts response.contents.map(&:key)
end