获取对象列表

您可以使用 list_objects 接口列举对象,每次最多返回1000个对象,您可以使用请求参数作为选择条件,以返回存储桶中对象的子集。如果桶中对象数大于1000,则返回的结果中 is_truncated 为true,通过返回的 next_marker 标记可以作为下次读取的起点。

以下代码展示如何获取对象列表:

def list_objects(client, bucket_name, max_keys = 50)
  if max_keys < 1 || max_keys > 1000
    puts 'Maximum number of objects to request must be between 1 and 1,000.'
    return
  end

  resp = client.list_objects(
    bucket: bucket_name,
    max_keys: max_keys
  )
  objects = resp.contents

  if objects.count.zero?
    puts "No objects in bucket '#{bucket_name}'."
    return
  else
    if resp.is_truncated
      puts "First #{objects.count} objects in bucket '#{bucket_name}':"
    else
      puts "Objects in bucket '#{bucket_name}':"
    end
    objects.each do |object|
      puts object.key
    end
  end
rescue StandardError => e
  puts "Error accessing bucket '#{bucket_name}' " \
    "or listing its objects: #{e.message}"
end

list_objects 可设置的部分参数如下:

参数 类型 说明 是否必要
bucket String bucket的名称。
delimiter String 与 prefix 参数一起用于对对象key进行分组的字符。所有key包含指定的 prefix 且第一次出现 delimiter 字符的对象作为一组。如果没有指定 prefix 参数,按Delimiter对所有对象key进行分割,多个对象分割后从对象key开始到第一个 delimiter 之间相同的部分形成一组。
encoding_type String 用于设置response中object key的字符编码类型。
marker String 指定一个标识符,返回的对象的key将是按照字典顺序排序后位于该标识符之后的所有对象。
max_keys Integer 设置response中返回object key的数量,默认值和最大值均为1000。
prefix String 限定返回对象的key必须以 prefix 作为前缀。