carrierbølgeintegration

hvis du understøtter dynamisk upload af billeder i din Ruby on Rails-applikation, er billederne sandsynligvis knyttet til en bestemt modelenhed. Rails bruger ActiveRecord til Modelenheder som standard, mens Mongoide dokumenter bruges til en MongoDB-baseret model. Eksempler kan omfatte at holde billedet som attributten’ billede ‘for en Postenhed eller som attributten’ profile_picture ‘ for en brugerenhed.

Bærebølgeperlen kan være nyttig til at integrere billedoverførsler med din model. Som standard lagrer Carrierbølge billeder på den lokale harddisk, men den har også yderligere plugins tilgængelige til billedlagring og manipulation.

den Cloudinary perle giver et plugin til Bærerbølge. Brug af dette plugin giver dig mulighed for at nyde fordelene ved Transportbølge til let at uploade billeder fra HTML-formularer til din model, mens du nyder de store fordele ved Cloudinary: uploadede billeder gemmes i skyen, transformeres og manipuleres i skyen og leveres automatisk via en CDN.

bærebølgeinstallation og opsætning

for at bruge det valgfrie integrationsmodul til upload af billeder med ActiveRecord eller Mongoid ved hjælp af bærebølge skal du installere Bærebølgeperlen:

Kopier til udklipsholder
gem install carrierwave

skinner 3.Gemfile:

Kopier til udklipsholder
gem 'carrierwave'gem 'cloudinary'

skinner 2.miljø.rb

kopi til udklipsholder
config.gem 'carrierwave', :version => '~> 0.4.10'config.gem 'cloudinary'

Bemærk

Bærerbølgeperlen skal indlæses før den Skyrige perle.

Upload eksempler

nedenfor er et kort eksempel, der viser at bruge Cloudinary med bærebølge i dit Rails-projekt. I dette eksempel bruger vi Postmodelenheden til at understøtte vedhæftning af et billede til hvert indlæg. Vedhæftede billeder styres af attributten’ billede ‘ (kolonne) for Postenheden.

for at komme i gang skal du først definere en bærebølge uploader klasse og fortælle det at bruge Cloudinary plugin. For detaljer, se bærerbølgedokumentationen.

i dette eksempel konverterer vi det uploadede billede til en PNG, før vi gemmer det i skyen. Vi vil også tildele det post_picture tag. Vi definerer to yderligere transformationer, der kræves for at vise billedet på vores side: ‘standard’ og ‘thumbnail’. Et tilfældigt genereret unikt offentligt ID genereres for hvert uploadet billede og gemmes vedvarende i modellen.

i det følgende eksempel definerer vi eksplicit et public_id baseret på indholdet af attributten ‘short_name’ for ‘Post’ – enheden.

den ‘billede’ attribut af indlæg er simpelthen en streng (en DB migration script er nødvendig selvfølgelig). Vi monterer det til den’ PictureUploader ‘ klasse, vi lige har defineret:

kopi til udklipsholder
class Post < ActiveRecord::Base ... mount_uploader :picture, PictureUploader ...end

i vores HTML-formular til redigering af indlæg tilføjer vi et Filfelt til upload af billedet og også et skjult ‘cache’ – felt til understøttelse af sideindlæsning og valideringsfejl uden at miste det uploadede billede. Eksemplet nedenfor er i’ HAML ‘(du kan selvfølgelig gøre nøjagtigt det samme ved hjælp af ‘ERB’):

Kopier til udklipsholder
= form_for(:post) do |post_form| = post_form.hidden_field(:picture_cache) = post_form.file_field(:picture)

i vores controller gemmer eller opdaterer vi postens attributter på standard måde. Eksempel:

kopi til udklipsholder
post.update_attributes(params)

Bemærk

hvis du uploader billeder direkte til Cloudinary, sendes en signeret identifikator til controlleren i stedet for de faktiske billeddata. Cloudinary s Carrierbølge plugin problemfrit håndterer direkte identifikatorer, verificerer signaturen, og opdaterer modellen med en henvisning til det uploadede billede.

på dette tidspunkt uploades det billede, som brugeren uploader til din server, til Cloudinary, som også tildelte det angivne offentlige ID og tag og konverterer det til PNG. Det offentlige ID sammen med versionen af det uploadede billede gemmes i attributten ‘billede’ for vores Postenhed. Bemærk, at transformationerne som standard ikke genereres på dette tidspunkt; de genereres kun, når en slutbruger får adgang til dem for første gang. Dette er sandt, medmindre du angiver ‘proces :ivrig => sand’ eller blot ‘ivrig’ for hver transformation.

nu Kan du bruge standard image_tag opkald til visning af de uploadede billeder og deres afledte transformationer, og Cloudinary gem genererer automatisk den korrekte fulde URL for at få adgang til dine ressourcer:

Kopier til udklipsholder
image_tag(post.picture_url, :alt => post.short_name)image_tag(post.picture_url(:thumbnail), :width => 50, :height => 50)

brugerdefinerede og dynamiske transformationer

Cloudinary ‘ s plugin til bærebølge understøtter alle standard Bærebølgeændringsstørrelser og beskæringsindstillinger. Derudover kan du anvende enhver brugerdefineret transformation understøttet af Cloudinary ved hjælp af cloudinary_transformation – metoden. Opkald cloudinary_transformation kan også gøres i kombination med standard Bærebølgeændringsstørrelse og afgrødemetoder. Følgende uploader-klasse viser et almindeligt eksempel på brug af brugerdefinerede transformationer:

du kan tage dette videre og anvende kædede transformationer for at opnå mere komplekse resultater. Disse transformationer kan anvendes som en indgående transformation under upload eller som en del af de forskellige versioner, der genereres enten dovent eller ivrigt under upload. Følgende uploaderklasse inkluderer sådanne kædede transformationer anvendt ved hjælp af parameteren transformation for metoden cloudinary_transformation.

nogle hjemmesider har et grafisk design, der tvinger dem til at vise de samme billeder i mange forskellige dimensioner. Formelt definere flere uploader versioner kan være en besvær. Du kan stadig bruge bærebølge og udnytte Cloudinarys dynamiske transformationer ved at anvende ønskede transformationer, mens du bygger dit syn. Enhver version kan genereres dynamisk fra din visning uden afhængighed af Bærebølgeversioner. For at opnå dette skal du bruge attributten full_public_id med cl_image_tag til at oprette cloud-baserede transformations-URL ‘ er for de uploadede billeder, der er knyttet til din model.

kopi til udklipsholder
cl_image_tag(post.picture.full_public_id, :format => "jpg", :width => 100, :height => 200, :crop => :crop, :x => 20, :y => 30, :radius => 10)

brugerdefineret koordinatbaseret beskæring

hvis du tillader dine brugere manuelt at vælge beskæringsområdet, anbefaler vi,at du holder koordinaterne vedvarende i modellen for at aktivere forskellige beskæringer på det originale billede i fremtiden. Følgende uploader-klasse henter de brugerdefinerede koordinater fra attributterne for model – objektet. custom_crop – metoden i dette eksempel returnerer en Hash af yderligere Cloudinary-transformationsparametre, der skal anvendes.

hvis du kun vil gemme den beskårne version af billedet, kan du bruge en indgående transformation. På denne måde gemmes det originale billede ikke i skyen; kun den beskårne version. Du kan derefter bruge yderligere transformationer til at ændre størrelsen på det beskårne billede. Følgende eksempel kalder process :custom_crop i selve klassen (i stedet for i en ‘version’), mens de brugerdefinerede koordinater holdes som forbigående attributter på modellen (defineret med attr i stedet for at gemme dem vedvarende).