Я новичок в рельсах, так что извините, если это будет легко. Мне интересно, как загрузить фотографии и отобразить их в Ruby on Rails. У меня есть блог и хотелось бы иметь возможность прикреплять изображение при создании сообщения.Загрузка изображений Ruby on Rails
ответ
Скрепка является довольно удивительной. Там отличный RailsCast об этом - http://railscasts.com/episodes/134-paperclip
Многие люди рекомендуют PaperClip. Возможно, вы захотите попробовать это первым.
Предполагая, что вы не нужны замысловатых ухищрений, не хотят, чтобы добавить зависимость и хотите сохранить изображение в виде BLOB в вашей БД, вы можете сделать что-то вроде:
Модель:
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
контроллер:
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 для более полного учебника.
attachment_fu (http://github.com/technoweenie/attachment_fu
) - еще один вариант, хотя я лично рекомендовал бы paperclip. Он не требует Rmagick, который является большим плюсом, и он поддерживает некоторые интересные функции, такие как загрузка на S3 с небольшой конфигурацией.
CarrierWave - это новый камень, чем Paperclip, и он выглядит намного более гибким. Об этом также есть Railscast: http://railscasts.com/episodes/253-carrierwave-file-uploads
CarrierWave - это, пожалуй, лучшее решение для загрузки изображений в Rails. В следующей статье описывается решение для загрузки изображений с использованием CarrierWave, в то время как преобразования изображений выполняются плавно в облаке. Загруженные изображения хранятся в облаке и доставляются через CDN. Не нужно устанавливать RMagick, MiniMagick и ImageMagick. http://cloudinary.com/blog/ruby_on_rails_image_uploads_with_carrierwave_and_cloudinary
Многие рекомендуют использовать Carrierwave
, и я не исключение, но я хотел указать одну вещь. На многих сайтах, написанных с помощью RoR (это, очевидно, не только проблема RoR), я замечаю, что запрос, который отправляет изображение, может находиться в ожидании как 2-3 секунды, а часто даже больше, что связывает экземпляр приложения (что, вероятно, не так страшно если вы используете потоки или не заботитесь о производительности, но это определенно, если вы используете единорога).Так я объясню, как избежать этого с помощью carrierwave:
1) Выберите вводную работника для вашего приложения (я обычно хожу с Sidekiq)
2) Добавить carrierwave_backgrounder
в ваш Gemfile и настроить его для работы с вашим фон рабочие и carrierwave (все в риом)
Я обычно имею контроль над своими каталогами так что я иду с store_in_background
возможностью carrierwave_backgrounder
которая обрабатывает и хранит изображения в файловой системе или S3 или независимо от того, который вы используете
3) Теперь, когда лет u обновляет изображение, его обработка и сохранение идут в фоновый режим, который освобождает ваш экземпляр приложения, но требуется некоторое время, в большинстве случаев более 1 секунды, и вам нужно вернуть какой-либо ответ пользователю
4) Самый простой способ предоставить пользователю некоторый ответ - вернуть javascript, в котором вы меняете старую картинку на gif с помощью счетчика или что-то в этом роде и устанавливаете функцию javascript SetInterval
, которая проверяет, была ли обработана картинка (carrierwave_background
предоставляет функцию, которая может изменять boolean column вашей модели до true, когда это будет обработано), отправляя AJAX
запрос каждые 2 секунды или что вы предпочитаете и изменяете изображение, когда оно было обработано.
Теперь у вас есть несвязанный экземпляр приложения и прекрасный пользовательский опыт в одно и то же время.
PS Я новичок рельсам и веб-разработки сами по себе, так что это руководство может иметь некоторые оговорки, которые я пропустил
Надеюсь, это поможет кому-то.
О, и, кстати, есть этот новый драгоценный камень под названием refile
, это потрясающе и может быть действительно хорошим вариантом в некоторых случаях.
- 1. Ruby on Rails - Загрузка изображения
- 2. Ruby on rails Загрузка файла
- 3. Ruby on rails Загрузка и загрузка файлов
- 4. Ruby on Rails: Загрузка изображений в сторону от мобильных
- 5. Ruby on rails: загрузка изображений с аутентификацией/авторизацией/тайм-аутами
- 6. Загрузка изображений на Ruby on Rails/Текстовое наложение
- 7. Сжатие изображений на Ruby on Rails 4
- 8. Ruby on Rails XPath Json Очистка изображений
- 9. Преобразование изображений svg в Ruby on Rails
- 10. Загрузка .env в приложении Ruby on Rails
- 11. Heroku - Ruby on Rails - Загрузка фотографий
- 12. Загрузка файлов в Ruby on Rails
- 13. Загрузка файлов с ruby on rails
- 14. Неполная загрузка страницы в Ruby On Rails
- 15. Ruby on Rails: Загрузка модифицированного сайта
- 16. Загрузка файла в ruby on rails
- 17. Ruby on Rails 4 CSV Рекурсивная загрузка
- 18. Ruby on Rails Загрузка файла AJAX
- 19. Ruby on Rails paperclip многократная загрузка с вложенными атрибутами
- 20. Ruby on Rails: Подклассы
- 21. Ruby on Rails - загрузка изображения с dropzone во вложенной форме
- 22. Ruby on Rails - Carrierwave, Невозможно загрузить несколько изображений
- 23. Ruby On Rails on eHost
- 24. Curl on Ruby on Rails
- 25. Ruby vs. Ruby On Rails
- 26. Загрузка изображений в Rails
- 27. Rails загрузка изображений безопасность
- 28. Ruby On Rails Jumbotron Background
- 29. Ruby on Rails с Plupload
- 30. Синтаксис Ruby (on Rails)
Избегайте хранения больших капель в базе данных - редко бывает случай, когда это хорошая идея. – bensie