使用aws-sdk-gem列出s3中的所有文件



我有以下场景。在我的案例中,考虑一下aws3文件夹结构如下

- videos
  - my_videos
    - college

我已经上传了视频文件,比如college中的myfirst_day.mp4,因为这个相关的形成密钥是"videos/my_videos/college/myfirst_day.mp4"

现在我必须列出videos/my_videos/college目录中的所有文件。我该怎么做。

为此,我使用aws-sdk-gem

您可以简单地迭代bucket objects并使用with_prefix方法

s3.buckets[YOUR BUCKET NAME].objects.with_prefix('videos/my_videos/college').each.collect(&:key)
#=> ["videos/my_videos/college/myfirst_day.mp4"]

或者使用as_tree方法

s3.buckets[YOUR BUCKET NAME].as_tree(prefix:'videos/my_videos/college').select(&:leaf?).collect(&:key)
 #=> ['videos/my_videos/college/myfirst_day.mp4']

显然,这些都是虚构的,因为我无法访问您的bucket,但请查看ObjectCollectionTree,了解AWSSDK中的更多方法。

有相当多的桶遍历方法可用,例如Tree响应children,后者将列出LeafNodes(文件(和BranchNodes(目录(。BranchNodes也将响应children,因此如果需要,可以使其递归。

要获得suffix(例如,仅文件名(,您可以在.中对其进行修补

class LeafNode
  def suffix
    @member.key.split(delimiter).pop
  end
end
class S3Object
  def suffix
    @key.split("/").pop
  end
end

我还没有以任何方式完全测试过这些,但如果文件名嵌套在分支中,它们应该只返回文件名本身。

最新更新