Tôi mới đến đường ray nên xin lỗi nếu điều này thật dễ dàng. Tôi đang tự hỏi cách tốt nhất để tải lên hình ảnh và hiển thị chúng trong Ruby on Rails. Tôi có một blog và muốn có tùy chọn đính kèm hình ảnh khi tạo bài đăng.Tải Ảnh lên Ruby on Rails
Trả lời
Kẹp giấy khá tuyệt vời. Có một railscast tuyệt vời về nó - http://railscasts.com/episodes/134-paperclip
Nhiều người khuyên bạn nên PaperClip. Có lẽ bạn muốn thử sử dụng điều đó trước.
Giả sử bạn không cần các tính năng ưa thích, không muốn thêm một sự phụ thuộc và muốn để lưu trữ các hình ảnh như một BLOB trong DB của bạn, bạn có thể làm điều gì đó như:
mẫu:
class Image < ActiveRecord::Base
def img=(input_data)
self.filename = input_data.original_filename
self.filetype = input_data.content_type.chomp
self.img = input_data.read
end
end
Bộ điều khiển:
class ImagesController < ApplicationController
def display_img
@img = Image.find(params[:id])
send_data(@img.img, :type => @img.filetype, :filename => @img.filename,
:disposition => 'inline')
end
end
Here's a link đến một hướng dẫn hoàn chỉnh hơn.
attachment_fu (http://github.com/technoweenie/attachment_fu
) là một tùy chọn khác mặc dù cá nhân tôi muốn giới thiệu paperclip. Nó không yêu cầu Rmagick là một điểm cộng lớn, và nó hỗ trợ một số tính năng thú vị như tải lên S3 với cấu hình nhỏ.
CarrierWave là một đá quý mới hơn so với Paperclip và trông có vẻ linh hoạt hơn nhiều. Ngoài ra còn có một Railscast về nó: http://railscasts.com/episodes/253-carrierwave-file-uploads
CarrierWave có lẽ là giải pháp tốt nhất để tải lên hình ảnh trong Rails. Bài viết sau đây mô tả một giải pháp để tải lên hình ảnh bằng cách sử dụng CarrierWave trong khi các phép biến đổi hình ảnh được thực hiện liền mạch trong đám mây. Hình ảnh được tải lên được lưu trữ trên đám mây và được phân phối qua CDN. Không cần cài đặt RMagick, MiniMagick và ImageMagick. http://cloudinary.com/blog/ruby_on_rails_image_uploads_with_carrierwave_and_cloudinary
Nhiều người khuyên bạn nên sử dụng Carrierwave
và tôi không phải là ngoại lệ nhưng tôi muốn chỉ ra một điều. Trên nhiều trang web được viết bằng RoR (nó rõ ràng không chỉ là vấn đề RoR) Tôi nhận thấy rằng yêu cầu gửi hình ảnh có thể đang chờ xử lý trong khoảng 2-3 giây và thậm chí nhiều hơn. nếu bạn đang sử dụng chủ đề hoặc không quan tâm nhiều về hiệu suất nhưng nó chắc chắn là nếu bạn đang sử dụng kỳ lân).Vì vậy, tôi sẽ giải thích làm thế nào để tránh điều đó bằng carrierwave:
1) Chọn một số công nhân nền cho ứng dụng của bạn (Tôi thường đi với Sidekiq)
2) Thêm carrierwave_backgrounder
để Gemfile của bạn và cấu hình nó để làm việc với các bạn công nhân nền và carrierwave (tất cả mọi thứ trong readme của nó)
tôi thường có kiểm soát thư mục của tôi vì vậy tôi đi với store_in_background
tùy chọn carrierwave_backgrounder
mà xử lý và lưu trữ các hình ảnh trong hệ thống tập tin hoặc S3 hay bất cứ điều gì bạn đang sử dụng
3) Bây giờ, khi yo u cập nhật hình ảnh, quá trình xử lý và lưu trữ của nó chuyển sang nền, giải phóng thể hiện ứng dụng của bạn nhưng phải mất một lúc, trong hầu hết các trường hợp hơn 1 giây và bạn cần trả lại một số phản hồi cho người dùng
4) cách cung cấp cho người dùng một số phản hồi là trả lại javascript, trong đó bạn thay đổi ảnh cũ thành hình gif bằng spinner hoặc cái gì đó tương tự và đặt chức năng javascript SetInterval
kiểm tra xem ảnh đã được xử lý hay chưa (carrierwave_background
cung cấp chức năng có thể thay đổi cột boolean của mô hình của bạn thành đúng khi xử lý xong) gửi AJAX
yêu cầu 2 giây một lần hoặc bất kỳ thứ gì bạn thích và thay đổi hình ảnh khi nó được xử lý.
Giờ đây, bạn có một phiên bản ứng dụng chưa được đồng bộ hóa và trải nghiệm người dùng tốt cùng một lúc.
PS Tôi mới vào đường ray và phát triển web cho mỗi gia nhập nên hướng dẫn này có thể có một số báo trước mà tôi đã bỏ lỡ
Hy vọng nó sẽ giúp ai đó.
Ồ, và nhân tiện, có viên ngọc mới này được gọi là refile
, thật tuyệt vời và có thể là một lựa chọn thực sự tốt trong một số trường hợp.
- 1. Tải tệp lên trong Ruby on Rails
- 2. Ruby on Rails Tải lên tệp AJAX
- 3. Ruby vs Ruby On Rails
- 4. Ruby on Rails 301
- 5. Ruby on Rails: unloadable
- 6. Ruby on rails: Tải lên từ xa Tệp tin bằng AJAX
- 7. Ruby on Rails CoffeeScript không
- 8. Heroku /-Ruby-on Rails lỗi: hình ảnh không precompiling
- 9. Intellisense cho Ruby, Ruby on Rails, Python
- 10. Ruby on Rails vs Django
- 11. Monit Ruby on Rails Sidekiq
- 12. Ruby on rails application root
- 13. Ruby on Rails SMS gửi
- 14. Ruby on rails và Node.js
- 15. Sử dụng Ruby on Rails
- 16. Ruby on Rails trên IIS?
- 17. Antipatterns với Ruby on Rails
- 18. Lỗi Rake Ruby on Rails
- 19. Ruby on Rails javascript_include_tag: defaults
- 20. Tài liệu Ruby on Rails
- 21. Sử dụng Photobucket api với Ruby on Rails
- 22. Carrierwave đa tệp (ảnh) tải lên
- 23. Ruby on Rails so với Python
- 24. Ruby on Rails, phát hiện Javascript
- 25. Ruby on Rails PaperClip Gem validate_attachement lỗi
- 26. Công cụ báo cáo Ruby on Rails?
- 27. Ruby On Rails: ví dụ về file_field trên form_for
- 28. Ruby on Rails: Xóa hộp thoại bật lên xác nhận hiển thị hai lần
- 29. Lưu trữ tài liệu bằng Ruby On Rails
- 30. Lỗi khi thiết lập Ruby on Rails
Tránh lưu trữ các đốm màu lớn trong cơ sở dữ liệu - hiếm khi xảy ra trường hợp đó là ý tưởng hay. – bensie