Graffetta - duplicazione di immagini
-
06-07-2019 - |
Domanda
Vorrei non duplicare l'immagine se è la stessa che viene pubblicata,
Come:
user1 pubblica un'immagine
user2 pubblica la stessa immagine2 # immagini nel db
C'è un modo per gestirlo ??
Grazie,
Soluzione
Per raggiungere questo obiettivo, è necessario suddividere gli allegati nel proprio modello.
Quindi dove probabilmente ora hai
class User < ActiveRecord::Base
has_attached_file :avatar #plus a bunch of specifications here
end
Dovresti impostare un nuovo modello e associazioni come
class User < ActiveRecord::Base
belongs_to :images
end
class Image < ActiveRecord::Base
has_many :users
has_attached_file :avatar
end
Quindi, nel tuo controller, dovresti farlo
Image.find_or_create_by_avatar_file_name(#filename here)
Quindi ora hai un attributo user.image_id e puoi avere una singola immagine caricata associata a più utenti.
Tuttavia, ho creato un numero di sistemi abbastanza grandi con caricamenti di foto degli utenti (foto di badge, foto di avatar, foto divertenti, qualunque cosa) e l'effettiva sovrapposizione tra gli utenti tende ad essere piuttosto piccola. Inoltre, stai davvero risparmiando denaro su qual è la più economica delle tue risorse: spazio di archiviazione. Non risparmi nulla sui costi della larghezza di banda, sull'elaborazione o sulla complessità programmatica seguendo questa strada.
A meno che questo non sia un insieme davvero unico di circostanze (nel qual caso sarebbe bello sentire cosa stai facendo) Sconsiglierei di seguire questa strada.
Altri suggerimenti
http: / /www.codeproject.com/Messages/2913691/Comparing-one-image-to-many-others-speeded-up.aspx
Lo uso nel mio programma e tutto bene!
Avviso relativo al DB: archivia gli hash nella tabella. e quindi hai solo bisogno di un calcolo hash.
Informazioni sulla velocità
1) Vincola la dimensione dell'immagine 100x100 per esempio
2) Quando l'utente tenta di accedere, viene calcolato l'hash della sua password. penso che gli utenti accederanno più frequentemente quindi aggiorneranno i loro avatar.
Calcola l'hash di ogni immagine mentre viene salvata. Quando un nuovo utente pubblica la stessa immagine, controlla l'hash di quell'immagine e vedi se corrisponde a qualcosa nel database