2010-07-10 13 views
24

Co zrobić, aby Paperclip nie zapisywał oryginalnego pliku po jego przesłaniu? Albo jeszcze lepiej, aby zapisać skalowaną wersję pliku jako oryginał?Jak powiedzieć spinaczowi, aby nie zapisać oryginalnego pliku?

+0

Sprawdź moją odpowiedź [tutaj] (http://stackoverflow.com/questions/25467130/rails-4-and-paperclip-stop-the-original-style-file-upload-to -copy-it-from-an/25585186) – laertiades

Odpowiedz

43

wierzę, że można po prostu zdefiniować styl dla: original mieć spinacza zastąpić oryginalny z tej wielkości.

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

Awesome. Dziękuję, Chris. Nie mogę uwierzyć, że to przeoczyłem. – Jade

+0

fajne rozwiązanie !! – flunder

+0

Czy testowałeś? To działa? – Hamdan

0

Paperclip zawsze domyślnie zapisuje oryginał, ale "wierzę", że jeśli po prostu usuniesz go z migracji, nie będzie próbował go zapisać.

Zapisuję skalowany oryginał na moim modelu, aby użytkownicy mogli później edytować jego zdjęcie. Mój model wygląda następująco:

: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

Dziękuję za odpowiedź, Trip. – Jade

4

Rozwiązanie Cris G może być dobre w większości prostych przypadków, ale ma ograniczenia. należy wziąć pod uwagę to, że: styl: oryginalny Paperclip przetwarza najpierw wszystkie inne, więc po tym uaktualnieniu: oryginalny obraz (znacznie mniejszy teraz) będzie źródłem dalszego przetwarzania. Dlatego jesteś zmuszony do zachowania: oryginalny styl w najlepszej rozdzielczości. Sytuacja jest gorsza, ponieważ trzeba przycinać obrazy za pomocą procesora: w takiej sytuacji naprawdę potrzebna jest prawdziwa oryginalna jakość.)

Więc polecam Ci nieco surowy (potrzeba, aby dowiedzieć się, jak dostać się co załączników modelu) rozwiązanie:

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 

nie dbają o to, co było przetwórstwo za sceną. To po prostu zabija oryginalny plik)

+0

Masz całkowitą rację, pomijając geometrię: oryginał wpływa na przetwarzanie wszystkich pozostałych. Ale czy mógłbyś wyjaśnić swoje rozwiązanie, aby nie dopuścić do tego, by oryginał został przesłany bardziej szczegółowo, jestem zdezorientowany! Dzięki! – Sujimichi

+0

@ Sujimichi również, po zapisaniu, "reprocess_attach" sprawdza czy załącznik istnieje jako oryginalny plik. Jeśli tak, to zapewnia, że ​​wszystkie pliki są przepłukiwane w systemie plików (zapisywanie) i po usunięciu oryginalnego pliku. –

Powiązane problemy