Статьи

Обработка изображений с CarrierWave

CarrierWave — это жемчужина для управления загруженными файлами в приложении Rails, в этом уроке мы рассмотрим процесс загрузки и обработки изображений.

Теперь предположим, что мы хотим иметь приложение, где пользователи могут загружать изображения и отображать их в галерее.

Начиная

Первое, что нам нужно сделать, — это создать новый проект rails, в который мы будем добавлять функции загрузки и обработки изображений, поэтому запустите окно терминала и выполните следующую команду:

$> rails new your_proyect_name

If you already have a created project you can skip this step.

Зайдите в каталог проекта и откройте его в вашем любимом текстовом редакторе, откройте Gemfile, перейдите в конец файла и добавьте туда камень несущей .

 gem 'carrierwave'

После того, как вы добавили драгоценный камень в свой Gemfile, вернитесь в окно терминала и выполните команду bundle, чтобы установить драгоценный камень.

Эшафот

Теперь давайте создадим ресурс scaffold для добавления функциональности carrierwave, в окне вашего терминала выполните следующую команду:

 $> rails g scaffold your_scaffold title:string description:text image:string

Эта команда создаст необходимые файлы и папки для работы с нами. Когда у нас есть ресурс scaffold, пришло время проверить его в нашем браузере, в окне терминала выполните следующую команду.

 $> rails s

Чтобы получить последнее приглашение, откройте браузер и перейдите по адресу: localhost: 3000 Если вы не получили никаких ошибок, пора запустить наши миграции для создания необходимых таблиц в нашей базе данных, поэтому вернитесь в окно терминала и запустите следующий:

 $> rake db:migrate

Загрузчик

После переноса нашей базы данных нам нужно создать загрузчик с помощью следующей команды.

 $> rails g uploader your_uploader

Эта команда создаст папку в каталоге вашего приложения, которая называется «загрузчики», и внутри этой папки вы найдете созданный вами класс загрузчиков, откроете загрузчик в текстовом редакторе и увидите, что в этом файле уже есть некоторый код, и он поставляется с довольно хорошая документация о том, как вы можете настроить его, но для целей этого урока мы можем оставить все как есть. Теперь откройте вашу модель Image, чтобы смонтировать загрузчик:

#This should go in your model
mount_uploader :image, YourUploaderClass

Добавьте эту строку под свой вызов attr_accessible, и это должно быть все, что вам нужно добавить в вашу модель, чтобы завершенный код модели выглядел следующим образом.

class Image < ActiveRecord::Base
attr_accessible :description, :image, :title
mount_uploader :image, ImagesUploader
end

Виды

Перейдите в папку представлений и откройте файл «new.html.erb», созданный скаффолдом, здесь отредактируйте следующую строку и включите форму для загрузки файлов.

<%= form_for(@image) do |f| %>

Таким образом, отредактированная строка должна выглядеть так:

<%= form_for @image, html: { multipart: true } do |f| %>

Также нам нужно отредактировать ввод для изображения, чтобы мы могли выбрать файл с нашего локального компьютера и загрузить его, поэтому в том же виде отредактируйте эту строку:

<%= f.text_field :image %>

Замените «текстовое поле» на «файловое поле», сохраните файл и перейдите к вашему «show.html.erb»

Отображение изображения

Когда вы окажетесь в шаблоне шоу, найдите следующую строку:

 <%= @image.image %>

И заменить это на это:

 <%= @image.image_url %>

One little gotcha is that when no image is saved to the database this will return nil, so you might want to convert the 'image_url' to a string with a call to the 'to_s' method.

Большой палец

Как только это будет сделано, пришло время попробовать, так что запустите ваш сервер rails и перейдите к «localhost: 3000 / images / new» здесь, загрузите изображение и убедитесь, что все работает как положено.

Теперь, когда вы загрузили изображение, вы заметите, что в шаблоне индекса он по-прежнему показывает простой URL-адрес изображения, так что пришло время сделать версию изображения в виде большого пальца.

Установка ImageMagick

Теперь, если вы работаете на Mac, это сделает вашу жизнь намного проще, если у вас установлен «homebrew», просто выполните следующую команду:

 $> brew install imagemagick

If you're following this tutorial on other than Mac you can find the documentation on ImageMagick here:ImageMagick

Иди, возьми чашку кофе или пиво, если хочешь, и подожди, пока она закончится.

Как только мы установим ImageMagick, перейдите к файлу загрузки и удалите комментарий в следующей строке:

 include CarrierWave::MiniMagick

Это даст нам обертку ImageMagick для ruby, я рекомендую мини-магику, поскольку она дает нам доступ к набору вспомогательных методов для очень простого манипулирования изображениями, поэтому после удаления комментария добавьте этот фрагмент кода в файл загрузчика.

# This should go in your uploader
version :thumb do
process resize_to_fit: [50, 50]
end

view raw
uploader.rb
hosted with ❤ by GitHub

Это обработает загруженное изображение и изменит его размер до указанных размеров.

Отображение большого пальца

Откройте файл index.html.erb и найдите эту строку:

 <%= image.image %>

И добавьте метод url, передающий версию, которую вы хотите отобразить, в нашем случае это большой палец, например:

 <%= image_tag image.image_url(:thumb) %>

Заключительный этап

Откройте свой драгоценный файл еще раз и добавьте драгоценный камень mini_magick под драгоценный камень carrierwave:

 gem "mini_magic"

Вернитесь в окно терминала и выполните команду bundle, чтобы установить гем, после того, как установка закончит установку, зайдите на «localhost: 3000 / images / new» и загрузите изображение, если все прошло хорошо, вы должны увидеть свое загруженное изображение. надеюсь, вам понравилось, в шаблоне шоу и в увеличенной версии изображения в шаблоне индекса.

Дальнейшее чтение

Если вы считаете, что carrierwave — правильный выбор для вас, вы можете посетить их вики- страницу на github, чтобы получить больше информации о том, как настроить более сложный загрузчик.