Establecer la ruta de las imágenes originales utilizando un clip en Rails?
-
21-08-2019 - |
Pregunta
La situación
Tengo un modelo simple con una imagen adjunta usando el clip, que tiene un par de procesado estilos para él (miniatura, completo, función).En este punto funciona como debería, y hace una estructura de directorios para cada objeto en /public/assets/foo/
, que contiene subdirectorios original, en miniatura, de lleno, y característica.
El problema
No quiero que el original (de alta resolución) de las imágenes a ser expuestos por los usuarios a obtener.Así que tengo la esperanza de que hay una manera de especificar una ruta de acceso diferente para almacenar los originales en algún lugar fuera de /public/
.Idealmente clip debe ser capaz de procesar los estilos de usar que la imagen original como la fuente, como lo hace actualmente.
También estoy abierto a sugerencias alternativas para la fabricación de los originales inaccesible para los usuarios externos.Cualquiera que sea la solución más práctica aquí.Gracias.
Solución
Yo recomiendo usar una interpolación personalizada que coloque los archivos originales fuera del directorio público. Algo como esto:
Paperclip.interpolates :maybe_public do |attachment, style|
style == :original ? "private" : "public"
end
has_attached_file :image, :path => ":rails_root/:maybe_public/:attachment..."
Esto ahorrará su: los archivos originales en un directorio no accesibles al público para la protección, pero todavía permiten el acceso Paperclip. Y mantendrá sus miniaturas en el directorio público de acceso estándar.
Otros consejos
Si es aceptable, vaya directamente ahorro de los originales, estableciendo el estilo por defecto.
has_attached_file :image,
:styles => { :normal => "800x600>" },
:default_style => :normal
Si no es así, y desea conservar los originales, si está usando Apache, se puede usar un archivo .htaccess para restringir el acceso al directorio originales
<FilesMatch "^\.(jpe?g|gif|png)$">
Order allow,deny
Deny from all
</Files>