Domanda

La situazione

Ho un modello semplice con una graffetta immagine allegata in uso, che ha un paio di stili elaborati per esso (miniatura, pieno, caratteristica). A questo punto funziona come dovrebbe, e fa una struttura di directory per ogni oggetto in /public/assets/foo/, contenente sottodirectory per originali, miniature, completa, e funzione.

Il problema

Non voglio che i (alta risoluzione) immagini originali di essere esposti per gli utenti di ottenere. Quindi spero ci sia un modo per specificare un percorso diverso per memorizzare gli originali da qualche parte al di fuori di /public/. Idealmente graffetta dovrebbe essere ancora in grado di rielaborare i modelli che utilizzano tale immagine originale come origine, come avviene attualmente.

Sono anche aperti ai suggerimenti alternativi per fare gli originali inaccessibili agli utenti esterni. Qualunque sia la soluzione più pratica qui. Grazie.

È stato utile?

Soluzione

Ti consiglio di utilizzare un'interpolazione personalizzata che metterà i file originali al di fuori della directory pubblica. Qualcosa di simile a questo:


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

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

In questo modo salvare i: file originali in una directory non accessibili al pubblico per la protezione, ma consentono ancora accesso Paperclip. E non mancherà di tenere le miniature nella directory pubblica per l'accesso standard.

Altri suggerimenti

Se è accettabile, si potrebbe saltare il salvataggio degli originali, impostando lo stile predefinito.

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

In caso contrario, e si desidera mantenere gli originali, se si utilizza Apache, è possibile utilizzare un file .htaccess per limitare l'accesso alla directory originali

<FilesMatch "^\.(jpe?g|gif|png)$">
   Order allow,deny
   Deny from all
</Files>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top