如何获取Active Storage存储附件的本地目录与原文件名组合完整路径
Active Storage 本地文件完整路径获取方案
以下方案仅适用于 Active Storage 配置为本地磁盘存储的场景,云存储场景无法获取本地文件路径
实现逻辑
Active Storage 本地磁盘存储默认不会用原始文件名作为磁盘上的存储文件名,会自动生成唯一key作为文件名存储,如果你需要拼接「本地存储根目录+原始文件名」格式的路径,可按以下步骤操作:
操作步骤
- 第一步:获取 Active Storage 本地存储根目录
storage_root = ActiveStorage::Blob.service.root
- 第二步:获取对应附件的blob对象,拼接目标路径
假设你的关联模型为User,附件字段为avatar,示例代码如下:
# 获取实例对象 user = User.find(1) blob = user.avatar.blob # 拼接符合要求的完整路径,示例输出格式:/home/myworkspace/project/storage/original_filname.extension target_full_path = File.join(storage_root, blob.filename.to_s)
扩展说明
如果你需要获取文件在磁盘上的实际存储路径(文件名为系统生成的唯一key,非原始文件名),可直接调用以下方法:
actual_storage_path = ActiveStorage::Blob.service.path_for(blob.key)
如果需要将实际存储的文件复制到你要求的「原始文件名」路径下,可追加代码:
FileUtils.cp(actual_storage_path, target_full_path)
内容的提问来源于stack exchange,提问作者Huzaifa Aslam
相关产品推荐
相关产品推荐

