Как закрыть доступ к оригинальным изображениям в Carrierwave?

Здравствуйте.
Необходимо сохранять оригиналы изображений без водяного знака. Каким образом можно ограничить доступ из вне к оригиналам изображений?

  1. Можно изменить имя оригинального файла добавив к нему sha хэш
  2. Изменить url для версий изображения

Изменять имя файла можно переопределив метод filename:
def filename
   "#{model.slug}.#{file.extension}" if original_filename.present?
end

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

Перерыл доки carrierwave и ничего полезного не нашел.
  • Вопрос задан
  • 2351 просмотр
Решения вопроса 2
@vsuhachev
Запрещать нужно с помощью настроек веб-сервера, который обслуживает файлы.

Например, переименовать все оригиналы в original.* и закрыть к ним доступ
location ~* /original\.(gif|jpg|jpeg)$ {
  deny all
}


PS: пример для nginx
Ответ написан
warlockit
@warlockit Автор вопроса
Все гениальное - просто, положил в корень папки с картинками .htaccess и закрыл все файлы кроме файлов версий, которые уже содержат водяной знак
Deny from all
<FilesMatch "(page_.*|full_.*|thumb_.*)$">
 Order Allow,Deny
 Allow from all
</FilesMatch>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Jeket
@Jeket
Создайте папку недоступную по http и загружайте туда файлы. Пример для paperclip:

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


has_attached_file :image,  
 :styles => ....,
:path => ":rails_root/files/:maybe_public/:id_partition/:id/:style/:basename.:extension"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы