ruby-on-rails Ruby:如何在路径中为子目录使用通配符

brccelvz  于 2022-12-01  发布在  Ruby
关注(0)|答案(1)|浏览(159)

我正在Rails应用程序中编写一个助手,需要为子目录提供一个带通配符的路径。

images/patient_id/some_folder/image_files.dcm

这是我的帮手

def get_files(image_folder)
   connection = Fog::Storage.new(
   provider: 'AWS',
   aws_access_key_id: AWS_ACCESS_KEY_ID,
   aws_secret_access_key: AWS_SECRET_ACCESS_KEY
   )
   connection.directories.get(AMAZON_BUCKET, prefix:"images/#{patient_number}/**").files.map do |file|
      file.key
  end
 end

我已经尝试了许多排列。我将感谢一些帮助在“some_folder”级别表示通配符。非常感谢。

exdqitrt

exdqitrt1#

虽然S3存储名称可能类似于您在标准操作系统中看到的文件路径,但实际上所有对象都存储在平面结构(存储桶)中的同一“级别”,并且此“路径”实际上只是检索给定对象的唯一标识符。
根据AWS What is Object Storage

比较对象存储和文件存储

对象存储和文件存储之间的主要区别在于数据结构和可伸缩性。文件存储通过目录和文件夹组织成层次结构。文件存储还遵循严格的文件协议,如SMB、NFS或Lustre。对象存储使用平面结构,其中包含元数据和每个对象的唯一标识符,这使得在可能存在的数十亿个其他对象中查找对象变得更加容易。
亚马逊S3 Features
Amazon S3的平面、无层次结构和各种管理功能正在帮助各种规模和行业的客户以对其业务和团队有价值的方式组织其数据。所有对象都存储在S3存储桶中,可以使用称为前缀的共享名称进行组织...
了解了这一点,您可以看到不需要“glob”样式的遍历,因为实际上没有什么可遍历的。您所需要做的就是为您希望检索的最高“Level”提供所需的前缀,服务将返回带有该前缀的每个项目。
要将此应用于您的情况,您只需将"images/#{patient_number}/"“之下”的所有内容作为前缀即可。
示例:

connection
  .directories
  .get(AMAZON_BUCKET, prefix:"images/#{patient_number}/")
  .files.map(&:key)

相关问题