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?
Odpowiedz
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}, ...}
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]
Dziękuję za odpowiedź, Trip. – Jade
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)
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
@ 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. –
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