代码之家  ›  专栏  ›  技术社区  ›  GhostRider

Rails 4、Fog、Amazon s3-从存储桶中的特定文件夹中以数组形式检索所有图像。

  •  0
  • GhostRider  · 技术社区  · 10 年前

    我使用的是亚马逊s3、rails 4和FOG宝石。我有一个名为uipstudy的亚马逊桶,里面有100个文件夹,每个文件夹包含大约20张图片。我使用以下命令获取特定文件夹中的所有图像(在application_controller.rb中包含的application_helper.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……等文件夹中的文件。是否有办法强制前缀与前缀中指定的文件夹完全相同?

    2 回复  |  直到 10 年前
        1
  •  1
  •   geemus    10 年前

    我认为你应该能够在你的脚本中做一个小的改变,以获得你想要的行为。只需在前缀后面加上一个正斜杠,这样它就可以清楚地显示您想要的是类似目录的内容,而不是以特定字符开头的任何/所有内容。

    所以,这会给你带来一些东西:

    directory = connection.directories.get('upimages', prefix: image_folder + '/')
    directory.files.map do |file|
      file.key
    end
    

    (我只是将其拆分为两个命令,以使其更容易格式化/读取)

        2
  •  1
  •   Antarr Byrd    10 年前

    下面是我使用 aws-sdk 宝石

    初始化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|
    
    推荐文章