Установить путь для исходных изображений с помощью скрепки в Rails?

Ситуация

У меня есть простая модель с прикрепленным изображением с использованием скрепки, для которой есть несколько обработанных стилей (миниатюра, полная, функция). На данный момент он работает как надо и создает структуру каталогов для каждого объекта в /public/assets/foo/, содержащую подкаталоги для оригинала, эскиза, полного и функционального.

Проблема

Я не хочу, чтобы исходные изображения (с высоким разрешением) были доступны пользователям. Поэтому я надеюсь, что есть способ указать другой путь для хранения оригиналов где-то за пределами /public/. В идеале скрепка должна по-прежнему иметь возможность повторно обрабатывать стили, используя это исходное изображение в качестве источника, как это происходит в настоящее время.

Я также открыт для альтернативных предложений о том, как сделать оригиналы недоступными для внешних пользователей. Что бы ни было наиболее практичным решением здесь. Спасибо.


person Michael Richards    schedule 12.05.2009    source источник
comment
Можете ли вы просто передать :processors =› [] вызову has_attached_file?   -  person    schedule 16.11.2009


Ответы (2)


Я бы порекомендовал использовать пользовательскую интерполяцию, которая поместит ваши исходные файлы за пределы общедоступного каталога. Что-то вроде этого:


Paperclip.interpolates :maybe_public do |attachment, style|
  style == :original ? "private" : "public"
end

has_attached_file :image, :path => ":rails_root/:maybe_public/:attachment..."

Это сохранит ваши файлы :original в закрытом каталоге для защиты, но все же разрешит доступ Paperclip. И он будет хранить ваши эскизы в общедоступном каталоге для стандартного доступа.

person jyurek    schedule 12.05.2009
comment
Спасибо, это работает именно так, как я хотел. На самом деле мне пришлось загрузить последнюю версию Paperclip с Github, поскольку в моей устаревшей версии еще не было методов интерполяции :) - person Michael Richards; 13.05.2009

Если это приемлемо, вы можете пропустить сохранение оригиналов, установив стиль по умолчанию.

  has_attached_file :image,
                    :styles => { :normal => "800x600>" },
                    :default_style => :normal

Если нет, и вы хотите сохранить оригиналы, если вы используете apache, вы можете использовать файл .htaccess, чтобы ограничить доступ к каталогу оригиналов.

<FilesMatch "^\.(jpe?g|gif|png)$">
   Order allow,deny
   Deny from all
</Files>
person andi    schedule 12.05.2009
comment
У меня :full настроен на стиль по умолчанию. Он не пропускает сохранение оригиналов, он просто устанавливает стиль, который @foo.image.url возвращает без аргумента, который по умолчанию является :original. Просто вам не нужно постоянно указывать стиль с помощью @foo.image.url(:full). - person Michael Richards; 13.05.2009