在本地我可以Dir.glob("path/to/my/*.jpg")
来获取匹配的路径数组。如何使用S3存储执行此操作?
答案 0 :(得分:0)
开箱即用,S3允许"前缀" (最后用通配符),但不是通路中途的通配符。我创建了一个方法来使用搜索前缀直到第一个*
,然后通过切换到正则表达式来过滤掉其余的。
这是通配符搜索:
# /app/services/S3.rb
class S3
class << self
# this is designed to imitate Dir.glob, so '*' is a wildcard
def glob(filename_pattern)
prefix = filename_pattern.sub(/\*.*/, "")
regex = /.*/
if filename_pattern =~ /\*/
regex = Regexp.new filename_pattern[/\*.*/].gsub("*", ".*")
end
bucket.objects(prefix: prefix).map(&:key).select{|key| key.match(regex)}
end
private
def bucket
@bucket ||= Aws::S3::Resource.new(region: ENV['AWS_REGION']).bucket(ENV['AWS_S3_BUCKET'])
end
end
end
调用此类的示例:S3.glob("images/doggos/*.jpg")