2011-05-22 14 views
5

queremos asegurarnos de que SOLAMENTE los usuarios que han iniciado sesión puedan ver/descargar los archivos cargados desde carrierwave.Asegurando los archivos cargados de Carrierwave

¿Cómo se hace esto?

Se movió el directorio de la tienda del público a RAILS_ROOT, se creó la ruta para mostrar y descargar.

El problema es si es una imagen, <%= image_tag(photo.image_url) %> obtengo la ruta completa /Usuarios/nombre/proyectos/appname/files/image/id/image.png, por lo que no se representa.

Además, sería bueno si la vista no representara mi ruta absoluta, solo la ruta relativa del sitio.

Respuesta

3

Esto es realmente una cosa realmente fácil de hacer. Aquí hay un blog que habla sobre sendfile y x-sendfile. Esto debería enviarte en la dirección correcta.

http://www.therailsway.com/2009/2/22/file-downloads-done-right

Aquí está la documentación de los carriles para él.

http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_file

Dado que este es manejado a nivel del controlador, sólo asegúrese de que usted tiene un before_filter que comprueba si el usuario está autorizado, a continuación, utilizar el método send_file en su acción del controlador.

+0

He visto este artículo y necesito mover el store_dir del público, pero creo que estoy haciendo algo mal. store_dir es "/#{Rails.root.to_s}/files/#{model.class.to_s.underscore}/#{mounted_as}/#{model.customer_id}/#{model.id}". Sigue obteniendo ActionController :: RoutingError (Ninguna ruta coincide con "/Users/.../42/142/thumb_9-cars.jpg") – pcasa

+0

Sí, no tendrás una ruta al archivo usando esa ruta en la aplicación web, eso es por qué está utilizando send_file ... para que pueda apuntarlo a una ruta de sistema de archivos normal. Si carrierwave está almacenando el archivo en su sistema de archivos, y la image_url es la ruta correcta. Todo debería funcionar. Recuerde que va a señalar su etiqueta de imagen en la ruta al controlador que está emitiendo la imagen, no la ruta de la imagen real. – quest

Cuestiones relacionadas