Rails 4、Fog、Amazon s3 - 从存储桶中的特定文件夹中检索所有图像作为数组。
Rails 4, Fog, Amazon s3 - retrieving all the images as an array from a specific folder in a bucket.
我正在使用亚马逊 s3、rails 4 和 FOG gem。我有一个名为 uipstudy 的亚马逊存储桶,其中包含 100 个文件夹,每个文件夹包含大约 20 张图像。我使用以下方法获取特定文件夹中的所有图像(在我的 application_helper.rb 中,它包含在 application_controller.rb 中)。
def get_files(image_folder)
connection = Fog::Storage.new(
provider: 'AWS',
aws_access_key_id: '######',
aws_secret_access_key: '#######'
)
connection.directories.get('uipimages', prefix:image_folder).files.map do |file|
file.key
end
end
在我的控制器中,我有这个....在这个例子中,我正在查找 uipstudy 存储桶中的文件夹“1”。
#Amazon solution:
@images = get_files('1')
@images.each do |image|
image = "https://s3.amazonaws.com/uipstudy/#{image}"
@image_array << image
end
问题是它会返回标有“1”的文件夹中的文件,但也会返回 10、11、12、13...等文件夹中的文件。我假设前缀是绝对的,但它似乎不是。有没有办法强制前缀准确地获取前缀中指定的文件夹?
下面是我使用 aws-sdk gem.
的解决方案
初始化 s3 客户端
s3 = AWS::S3.new
bucket = s3.buckets[ENV['AWS_BUCKET']]
_inbox 文件夹中 ipa 文件的正则表达式
regex = %r{_inbox/(?:[^/]+/)*[^/]+\.ipa}i
获取并处理 ipa 文件
bucket.objects.select { |o| o.key.match(regex) }.each do |ipa|
我认为您应该能够对脚本进行小的更改以获得您想要的行为。只需在前缀上附加一个正斜杠,这样它就可以清楚地表明您想要目录之类的东西,而不是 any/all 以特定字符开头的东西。
所以,这会让你得到类似的东西:
directory = connection.directories.get('upimages', prefix: image_folder + '/')
directory.files.map do |file|
file.key
end
(我只是把它分成了两个命令,让它 format/read 更简单)
我正在使用亚马逊 s3、rails 4 和 FOG gem。我有一个名为 uipstudy 的亚马逊存储桶,其中包含 100 个文件夹,每个文件夹包含大约 20 张图像。我使用以下方法获取特定文件夹中的所有图像(在我的 application_helper.rb 中,它包含在 application_controller.rb 中)。
def get_files(image_folder)
connection = Fog::Storage.new(
provider: 'AWS',
aws_access_key_id: '######',
aws_secret_access_key: '#######'
)
connection.directories.get('uipimages', prefix:image_folder).files.map do |file|
file.key
end
end
在我的控制器中,我有这个....在这个例子中,我正在查找 uipstudy 存储桶中的文件夹“1”。
#Amazon solution:
@images = get_files('1')
@images.each do |image|
image = "https://s3.amazonaws.com/uipstudy/#{image}"
@image_array << image
end
问题是它会返回标有“1”的文件夹中的文件,但也会返回 10、11、12、13...等文件夹中的文件。我假设前缀是绝对的,但它似乎不是。有没有办法强制前缀准确地获取前缀中指定的文件夹?
下面是我使用 aws-sdk gem.
的解决方案初始化 s3 客户端
s3 = AWS::S3.new
bucket = s3.buckets[ENV['AWS_BUCKET']]
_inbox 文件夹中 ipa 文件的正则表达式
regex = %r{_inbox/(?:[^/]+/)*[^/]+\.ipa}i
获取并处理 ipa 文件
bucket.objects.select { |o| o.key.match(regex) }.each do |ipa|
我认为您应该能够对脚本进行小的更改以获得您想要的行为。只需在前缀上附加一个正斜杠,这样它就可以清楚地表明您想要目录之类的东西,而不是 any/all 以特定字符开头的东西。
所以,这会让你得到类似的东西:
directory = connection.directories.get('upimages', prefix: image_folder + '/')
directory.files.map do |file|
file.key
end
(我只是把它分成了两个命令,让它 format/read 更简单)