Задать путь для оригинальных изображений с помощью скрепки в Rails? - PullRequest
8 голосов
/ 12 мая 2009

Ситуация

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

Проблема

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

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

Ответы [ 2 ]

21 голосов
/ 12 мая 2009

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


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

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

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

0 голосов
/ 12 мая 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>
...