2010-07-10 14 views
24

¿Cómo le digo a Paperclip que no guarde el archivo original cuando se carga? ¿O mejor aún, para almacenar una versión escalada del archivo como original?¿Cómo le digo a paperclip que no guarde el archivo original?

+0

Mira mi respuesta [aquí] (http://stackoverflow.com/questions/25467130/rails-4-and-paperclip-stop-the-original-style-file-upload-to -copy-it-from-an/25585186) – laertiades

Respuesta

43

Creo que simplemente puede definir un estilo para: original, para tener un clip reemplazar el original con ese tamaño.

:styles => { :original => '300x168>', :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, ...} 
+0

Impresionante. Gracias, Chris. No puedo creer que lo haya pasado por alto. – Jade

+0

buena solución! – flunder

+0

¿Has probado? ¿Funciona? – Hamdan

0

Paperclip siempre guarda un original de manera predeterminada, pero "creo" que si lo elimina de su migración, no lo intentará y lo guardará.

Guardo un original escalado en mi modelo para que los usuarios puedan editar su imagen más tarde. Mi modelo es el siguiente:

:styles => { :cropped_thumb => {:geometry => "115x70#", :jcrop => true}, :resized_thumb => {:geometry => "115x70>"}, :deal => {:geometry => "64x56#"}, 
:cropped_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}#", :jcrop => true}, 
:resized_large => {:geometry => "#{PHOTO_IMAGE_WIDTH}x#{PHOTO_IMAGE_HEIGHT}>"}, 

:orig => '300x168>', #this is the scaled original that I call later 


:cropped_orig => {:geometry => '300x168#', :jcrop => true}, 
:resized_orig => {:geometry => '300x168>'} }, 
:processors => [:jcropper] 
+0

Gracias por su respuesta, Trip. – Jade

4

La solución de Cris G puede ser agradable en la mayoría de los casos simples, pero tiene sus limitaciones. considere que: estilo: proceso original de Paperclip, en primer lugar, todos los demás, por lo que después de esa actualización: la imagen original (mucho más pequeña ahora) será la fuente para el siguiente procesamiento. Por lo tanto, se ve obligado a mantener: estilo original como mejor resuelto. La situación empeora ya que necesita recortar imágenes con el procesador: esa es la situación en la que realmente necesita una calidad original real.)

por lo que recomiendo que un tanto cruda (que averiguar cómo conseguir cada adjuntos del modelo) solución:

after_save :reprocess_attach 

private 

def reprocess_attach 
    if self.<atch_name>.present? && Pathname.new(self.<atch_name>.path).exist? 
     self.<atch_name>.save 
     File.unlink(self.<atch_name>.path) 
    end 
end 

que no se preocupa por lo que el procesamiento estaba detrás del escenario. Simplemente mata el archivo original)

+0

Tiene toda la razón, anulando la geometría de: impactos originales el procesamiento de todos los demás. Pero, ¿podría explicarme su solución para evitar que el original se cargue con más detalle? ¡Estoy confundido! ¡Gracias! – Sujimichi

+0

@Sujimichi bien, después de guardar, el "reprocess_attach" comprueba si el archivo adjunto existe como archivo original. Si lo hace, se asegurará de que todos los archivos se vacíen en el sistema de archivos (guardar) y después de eliminar el archivo original. –

Cuestiones relacionadas