integração de onda de Carrier

se você suporta dinamicamente upload de imagens em sua aplicação Ruby on Rails, as imagens são provavelmente ligadas a uma determinada entidade modelo. Rails usa ActiveRecord para entidades modelo por padrão, enquanto documentos Mongóides são usados para um modelo baseado em MongoDB. Os exemplos podem incluir a manutenção da imagem como atributo “imagem” de uma entidade postal ou como atributo “profile_picture” de uma entidade utilizadora.

a gema de CarrierWave pode ser útil para integrar uploads de imagens com o seu modelo. Por padrão, CarrierWave armazena imagens no disco rígido local, mas também tem plugins adicionais disponíveis para armazenamento de imagens e manipulação.

The Cloudinary gem provides a plugin for CarrierWave. A utilização deste plugin permite-lhe desfrutar dos benefícios do CarrierWave para carregar facilmente imagens de formulários HTML para o seu modelo, enquanto desfruta dos grandes benefícios do Cloudinary: as imagens carregadas são armazenadas em nuvem, transformadas e manipuladas na nuvem, e entregues automaticamente através de um CDN.

CarrierWave instalação e configuração de

Para utilizar o opcional módulo de integração para o upload de imagens com o ActiveRecord ou Mongoid usando o CarrierWave, instalar o CarrierWave gem:

Copiar para área de transferência
gem install carrierwave

o Rails 3.x Gemfile:

Copiar para área de transferência
gem 'carrierwave'gem 'cloudinary'

Rails 2.x environment.rb

Copiar para área de transferência
config.gem 'carrierwave', :version => '~> 0.4.10'config.gem 'cloudinary'

Nota

O CarrierWave gema deve ser carregada antes de Cloudinary gem.

Upload examples

Below is a short example that demonstrates using Cloudinary with CarrierWave in your Rails project. Neste exemplo, usamos a entidade Post model para suportar anexar uma imagem a cada post. As imagens anexadas são geridas pelo atributo “picture” (coluna) da entidade Postal.

para começar, primeiro defina uma classe de carga de onda de Carriers e diga-lhe para usar o plugin Cloudinary. Para mais detalhes, consulte a documentação sobre a Canrierwave.

neste exemplo, vamos converter a imagem enviada para um PNG antes de armazená-la na nuvem. Também lhe atribuiremos a etiqueta post_picture. Nós definimos duas transformações adicionais necessárias para exibir a imagem em nosso site: ‘standard’ e ‘thumbnail’. Um ID público único gerado aleatoriamente é gerado para cada imagem enviada e persistentemente armazenado no modelo.

no exemplo seguinte, definimos explicitamente um public_id baseado no conteúdo do atributo “short_name” da entidade “Post”.

o atributo “imagem” de Post é simplesmente uma String (um script de migração DB é necessário, claro). Vamos montá-lo para a aula de ‘PictureUploader’ que acabamos de definir.:

Copiar para área de transferência
class Post < ActiveRecord::Base ... mount_uploader :picture, PictureUploader ...end

Em nosso formulário HTML para edição de posts, vamos adicionar um campo de Arquivo para fazer o upload da imagem e também um oculto ‘cache’ de campo para apoiar o recarregamento da página e erros de validação sem perder a imagem carregada. O exemplo abaixo é em ‘HAML’ (claro que você pode fazer exatamente a mesma usando “ERB’):

Copiar para área de transferência
= form_for(:post) do |post_form| = post_form.hidden_field(:picture_cache) = post_form.file_field(:picture)

Em nosso controller, podemos salvar ou atualizar os atributos do post de forma padrão. Por exemplo:

Copiar para área de transferência
post.update_attributes(params)

Nota

Se você for fazer o upload de imagens a partir do navegador diretamente para Cloudinary, assinada identificador é enviada para o controlador em vez de os dados de imagem real. O plugin CarrierWave da Cloudinary lida perfeitamente com identificadores diretos, verifica a assinatura e atualiza o modelo com uma referência à imagem enviada.

neste ponto, a imagem enviada pelo Usuário para o seu servidor é enviada para a Cloudinary, que também atribuiu o ID e tag públicos especificados e converte-o para PNG. O ID público, juntamente com a versão da imagem enviada, são armazenados no atributo “imagem” da nossa entidade de Post. Note que por padrão as transformações não são geradas neste ponto; elas são geradas apenas quando um usuário final as acessa pela primeira vez. Isto é verdade a menos que você especifique “processo :eager => true “ou simplesmente” eager ” para cada transformação.

Agora você pode usar o padrão image_tag chamadas para exibir as imagens carregadas e seus derivados transformações e a Cloudinary gem gera automaticamente a corrigir o URL completo para acessar seus recursos:

Copiar para área de transferência
image_tag(post.picture_url, :alt => post.short_name)image_tag(post.picture_url(:thumbnail), :width => 50, :height => 50)

Personalizado e dinâmico de transformações

Cloudinary do plugin para o CarrierWave suporta todos os padrões de CarrierWave redimensionar e recortar opções. Além disso, você pode aplicar qualquer transformação customizada suportada pela Cloudinary usando o método cloudinary_transformation. Chamar cloudinary_transformation também pode ser feito em combinação com o redimensionamento padrão de onda de Carrier e métodos de colheita. A seguinte classe uploader mostra um exemplo comum de utilização de transformações personalizadas:

pode levar isto mais longe e aplicar transformações acorrentadas para obter resultados mais complexos. Estas transformações podem ser aplicadas como uma transformação de entrada ao carregar ou como parte das diferentes versões que são geradas preguiçosamente ou ansiosamente durante o upload. A seguinte classe de uploader inclui as transformações acorrentadas aplicadas utilizando o parâmetro transformation do método cloudinary_transformation.

alguns sites têm um design gráfico que os obriga a exibir as mesmas imagens em muitas dimensões diferentes. Definir formalmente várias versões uploader pode ser um aborrecimento. Você ainda pode usar CarrierWave e alavancar as transformações dinâmicas da Cloudinary aplicando as transformações desejadas enquanto constrói sua visão. Qualquer versão pode ser gerada dinamicamente a partir de sua visão, sem dependência de versões CarrierWave. Para conseguir isso, use o atributo full_public_id com cl_image_tag para construir URLs de transformação baseados em nuvem para as imagens carregadas anexadas ao seu modelo.

Copiar para área de transferência
cl_image_tag(post.picture.full_public_id, :format => "jpg", :width => 100, :height => 200, :crop => :crop, :x => 20, :y => 30, :radius => 10)

de coordenadas Personalizado baseado no recorte

Se você permitir que seus usuários para selecionar manualmente a área de corte, recomendamos manter as coordenadas x,y, persistentemente, o modelo para ativar diferentes recorte na imagem original no futuro. A seguinte classe uploader obtém as coordenadas personalizadas dos atributos do objeto model. O método custom_crop neste exemplo retorna uma Hash de Parâmetros de transformação adicionais para aplicar.

se você quiser armazenar apenas a versão recortada da imagem, você pode usar uma transformação de entrada. Desta forma, a imagem original não é armazenada na nuvem; apenas a versão cortada. Você pode então usar outras transformações para redimensionar a imagem cortada. O exemplo seguinte chama process :custom_crop na própria classe (em vez de numa ‘versão’), enquanto as coordenadas personalizadas são mantidas como atributos transitórios no modelo (definidos com attr em vez de armazená-los persistentemente).