2010-07-10 28 views
24

Làm cách nào để yêu cầu Paperclip không lưu tệp gốc khi tệp được tải lên? Hoặc thậm chí tốt hơn, để lưu trữ một phiên bản thu nhỏ của tập tin như bản gốc?Tôi làm cách nào để nói kẹp giấy không lưu tệp gốc?

+0

Kiểm tra câu trả lời của tôi [ở đây] (http://stackoverflow.com/questions/25467130/rails-4-and-paperclip-stop-the-original-style-file-upload-to -opy-it-from-an/25585186) – laertiades

Trả lời

43

Tôi tin rằng bạn có thể chỉ cần xác định kiểu cho: ban đầu để có kẹp giấy thay thế bản gốc bằng kích thước đó.

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

Tuyệt vời. Cảm ơn, Chris. Tôi không thể tin rằng tôi đã bỏ qua điều đó. – Jade

+0

giải pháp tốt đẹp !! – flunder

+0

Bạn đã thử nghiệm chưa? Nó hoạt động? – Hamdan

0

Kẹp giấy luôn luôn lưu một bản gốc theo mặc định, nhưng tôi 'tin', rằng nếu bạn chỉ xóa nó khỏi di chuyển của bạn thì nó sẽ không thử và lưu nó.

Tôi lưu bản gốc được chia tỷ lệ trên mô hình của mình để người dùng có thể chỉnh sửa hình ảnh của họ sau này. Mô hình của tôi trông giống như sau:

: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

Cảm ơn phản hồi của bạn, Chuyến đi. – Jade

4

Giải pháp của Cris G có thể tốt đẹp ở hầu hết các trường hợp đơn giản nhưng có giới hạn. xem xét rằng: phong cách: bản gốc Paperclip quá trình đầu tiên của tất cả những người khác, vì vậy sau khi cập nhật: hình ảnh ban đầu (nhỏ hơn nhiều bây giờ) sẽ là nguồn cho chế biến sau đây. Do đó bạn buộc phải giữ nguyên: kiểu gốc được phân giải tốt nhất. Tình hình trở nên tồi tệ hơn khi bạn cần cắt ảnh bằng bộ xử lý: đó là tình huống mà bạn thực sự cần cho chất lượng gốc thực sự.)

Vì vậy, tôi sẽ khuyên bạn hơi thô (cần phải tìm hiểu làm thế nào để có được tất cả các file đính kèm của mô hình) giải pháp:

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 

nó không quan tâm đến những gì chế biến đứng đằng sau sân khấu. Nó chỉ giết chết tệp gốc)

+0

Bạn hoàn toàn đúng, ghi đè hình học: tác động ban đầu đến việc xử lý tất cả các hình ảnh khác. Nhưng bạn có thể giải thích giải pháp của bạn để ngăn chặn bản gốc được tải lên chi tiết hơn không, tôi đang bối rối! Cảm ơn! – Sujimichi

+0

@Sujimichi tốt, sau khi lưu, "reprocess_attach" kiểm tra xem tệp đính kèm có tồn tại dưới dạng tệp gốc hay không. Nếu có, nó đảm bảo rằng tất cả các tập tin được flushed trong hệ thống tập tin (lưu) và sau khi xóa các tập tin gốc. –

Các vấn đề liên quan