Загрузка файла в каталог за пределами RAILS ROOT с помощью Attachment_fu
-
21-09-2019 - |
Вопрос
Я пытаюсь использовать 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
Я нашел альтернативный метод, который подходит мне лучше, чем использование относительных имен путей.Я добавил метод под названием full_filename
к моему классу прикрепления:
class attachment < ActiveRecord::Base
def full_filename
return "/Users/ron/attachments/#{id}.#{file_format}"
end
end
Другие советы
Вероятно, это не проблема Attachment-Fu, а скорее то, как Ruby обрабатывает ввод-вывод файлов, а также то, как файлы хранятся в Unix.
Например, если ваше приложение находится, скажем, в ~/Users/ron/APP_NAME.
Если вы измените приведенный выше код:
:path_prefix => "~/APP_NAME/uploads/"
К:
:path_prefix => "../#{RAILS_ROOT}/uploads"
Файлы будут храниться в папке «uploads» в ~/Users/ron/uploads.«../» означает один каталог выше текущего корня Rails.Если вы хотите перейти на два каталога вверх, это будет «../../» и так далее.
Но это касается только иерархической навигации.Если вы хотите указать Attachment-Fu хранить файлы в жестко закодированном каталоге вашей файловой системы, вы можете указать ему путь к файлу, например «~/Users/ron/APP_NAME/uploads», но имейте в виду, что путь к файлу жестко закодирован. way хрупкий и может стать проблемой в будущем, если ваши требования к хранению файлов изменятся.
Надеюсь, это поможет.