Rails助手如何为AWS存储桶路径的子目录设置通配符?
解决S3路径子目录通配符匹配问题(Rails + Fog)
S3对象存储本身不支持**这类通配符语法,Fog调用中的prefix参数仅做前缀匹配,不需要额外加通配符。要获取images/patient_id/下所有子目录层级的文件,只需要调整prefix设置并过滤目录占位符即可。
修改后的助手方法代码:
def get_files(patient_number) connection = Fog::Storage.new( provider: 'AWS', aws_access_key_id: AWS_ACCESS_KEY_ID, aws_secret_access_key: AWS_SECRET_ACCESS_KEY ) bucket = connection.directories.get(AMAZON_BUCKET, prefix: "images/#{patient_number}/") bucket.files.map(&:key).reject { |key| key.end_with?('/') } end
关键说明:
- 将prefix设为
"images/#{patient_number}/",S3会返回所有以该路径开头的对象,自动包含后续所有子目录层级的文件 - 调用
.reject { |key| key.end_with?('/') }是为了过滤掉S3中用于模拟目录的空对象(S3本质是扁平存储,没有真实目录结构),只保留实际的文件路径 - 原方法中的参数
image_folder未被使用,这里改成了patient_number让参数更贴合实际用途
内容的提问来源于stack exchange,提问作者GhostRider
相关产品推荐
相关产品推荐

