使用attachment_fu将文件上载到RAILS ROOT之外的目录

时间:2009-09-07 04:39:51

标签: ruby-on-rails attachment-fu

我正在尝试使用attachment_fu将文件上传到RAILS_ROOT之外的目录。我希望将文件保存到~/APP_NAME/uploads/,以便在公开发布之前批准/拒绝这些文件。我为has_attachment尝试了以下配置:

has_attachment  :storage => :file_system,
                :path_prefix => "~/APP_NAME/uploads/",
                :max_size => 5.megabytes

不幸的是,此配置只是在~/APP_NAME/uploads/中创建RAILS_ROOT目录结构。有何方法将文件保存在RAILS_ROOT之外?

2 个答案:

答案 0 :(得分:1)

这可能不是Attachment-Fu问题,而是Ruby如何处理文件I / O以及如何在Unix中存储文件。

例如,如果您的应用位于〜/ Users / ron / APP_NAME

如果您更改上述代码:

:path_prefix => "~/APP_NAME/uploads/"

要:

:path_prefix => "../#{RAILS_ROOT}/uploads"

文件将存储在〜/ Users / ron / uploads中名为“uploads”的文件夹中。 “../”表示当前Rails根目录之上的一个目录。如果你想上两个目录,那就是“../../”等等。

但这只涉及分层导航。如果你想告诉Attachment-Fu将文件存储在文件系统的硬编码目录中,你可以给它一个文件路径,例如“〜/ Users / ron / APP_NAME / uploads”,但请记住文件路径中的硬编码方式很脆弱,如果您的文件存储需求发生变化,将来可能会成为一个痛点。

希望有所帮助。

答案 1 :(得分:0)

我发现了一种比使用相对路径名更适合我的替代方法。我在我的附件类中添加了一个名为full_filename的方法:

class attachment < ActiveRecord::Base
    def full_filename
       return  "/Users/ron/attachments/#{id}.#{file_format}"
    end
end