CarrierWave integrace

Pokud jste podporu dynamicky nahrávání obrázků v Ruby on Rails aplikace, obrázky jsou pravděpodobně připojeny k určité modelu entity. Rails používá ActiveRecord pro modelové entity ve výchozím nastavení, zatímco Mongoid dokumenty jsou použity pro model MongoDB bázi. Příkladem může být ponechání obrázku jako atributu „picture“ entity Post nebo jako atributu „profile_picture“ entity uživatele.

drahokam CarrierWave může být užitečný pro integraci obrázků s vaším modelem. Ve výchozím nastavení CarrierWave ukládá obrázky na místní pevný disk, ale má také k dispozici další pluginy pro ukládání a manipulaci s obrázky.

Cloudinary gem poskytuje plugin pro CarrierWave. Pomocí tento plugin umožňuje využívat výhod CarrierWave pro snadné nahrávání obrázků z HTML formuláře do modelu, a zároveň se těší skvělé výhody Cloudinary: nahrané obrázky jsou uloženy v cloudu, transformován a manipulovat v cloudu a automaticky doručeny prostřednictvím CDN.

CarrierWave instalace a nastavení

použít volitelnou integraci modulu pro nahrávání obrázků s ActiveRecord nebo Mongoid pomocí CarrierWave, nainstalovat CarrierWave gem:

Kopírovat do schránky
gem install carrierwave

Kolejnice 3.X Gemfile:

Kopírovat do schránky
gem 'carrierwave'gem 'cloudinary'

kolejnice 2.x prostředí.rb

Kopírovat do schránky
config.gem 'carrierwave', :version => '~> 0.4.10'config.gem 'cloudinary'

Poznámka:

CarrierWave gem by měl být vložen před Cloudinary gem.

Nahrát příklady

Níže je uveden krátký příklad, který demonstruje použití Cloudinary s CarrierWave ve vašem Kolejnice projektu. V tomto příkladu používáme entitu Post model k podpoře připojení obrázku ke každému příspěvku. Připojené obrázky jsou spravovány atributem „obrázek“ (sloupec) entity Post.

Chcete-li začít, nejprve definujte třídu carrierwave uploader a řekněte jí, aby použila plugin Cloudinary. Podrobnosti naleznete v dokumentaci CarrierWave.

v tomto příkladu převedeme nahraný obrázek na PNG před uložením do cloudu. Také mu přiřadíme značku post_picture. Definujeme dvě další transformace potřebné pro zobrazení obrázku na našem webu: „standardní“ a „miniatura“. Náhodně generované jedinečné veřejné ID je generováno pro každý nahraný obrázek a trvale uloženo v modelu.

v následujícím příkladu explicitně definujeme public_id na základě obsahu atributu ‚short_name‘ entity ‚Post‘.

atribut ‚picture‘ Post je jednoduše řetězec (samozřejmě je nutný skript pro migraci DB). Připojíme jej do třídy „PictureUploader“, kterou jsme právě definovali:

Kopírovat do schránky
class Post < ActiveRecord::Base ... mount_uploader :picture, PictureUploader ...end

V našem HTML formulář pro editaci Poštou, přidáme Souboru pole pro nahrávání obrazu a také skryté „cache“ pole pro podporu stránku nabíjení a ověření chyby bez ztráty nahraných obraz. Níže uvedený příklad je v HAML‘ (samozřejmě můžete udělat přesně to samé pomocí ‚ERB‘):

Kopírovat do schránky
= form_for(:post) do |post_form| = post_form.hidden_field(:picture_cache) = post_form.file_field(:picture)

V našem regulátoru, jsme uložit či aktualizovat atributy poště standardním způsobem. Příklad:

Kopírovat do schránky
post.update_attributes(params)

Poznámka:

Pokud jste nahrávání obrázků z prohlížeče přímo do Cloudinary, podepsané identifikátor je poslal do regulátoru namísto skutečných dat obrazu. Plugin carrierwave společnosti Cloudinary hladce zpracovává přímé identifikátory, ověřuje podpis a aktualizuje model s odkazem na nahraný obrázek.

V tomto bodě, obraz nahraných uživatelem na server je odeslán do Cloudinary, který také účelově určené Veřejné ID a tag a převádí je do formátu PNG. Veřejné ID spolu s verzí nahraného obrázku jsou uloženy v atributu „obrázek“ naší post entity. Všimněte si, že ve výchozím nastavení transformace nejsou generovány v tomto bodě, jsou generovány pouze, když koncový uživatel přistupuje poprvé. To platí, pokud nezadáte ‚process: eager => true‘ nebo jednoduše ‚eager‘ pro každou transformaci.

Nyní můžete použít standardní image_tag hovory pro zobrazení nahraných obrázků a jejich odvozené transformace a Cloudinary gem automaticky generuje správné úplnou adresu URL pro přístup ke zdrojům:

Kopírovat do schránky
image_tag(post.picture_url, :alt => post.short_name)image_tag(post.picture_url(:thumbnail), :width => 50, :height => 50)

Vlastní a dynamické proměny,

Cloudinary je plugin pro CarrierWave podporuje všechny standardní CarrierWave změna velikosti a oříznutí možnosti. Kromě toho můžete použít libovolnou vlastní transformaci podporovanou Cloudinary pomocí metody cloudinary_transformation. Volání cloudinary_transformation lze také provést v kombinaci se standardními metodami CarrierWave resize a crop. Následující třída uploader ukazuje běžný příklad použití vlastních transformací:

můžete to vzít dále a použít zřetězené transformace k dosažení složitějších výsledků. Tyto transformace mohou být aplikovány jako příchozí transformace při nahrávání nebo jako součást různých verzích, které jsou generovány buď líně nebo dychtivě při nahrávání. Následující třída uploader zahrnuje takové řetězové transformace aplikované pomocí parametru transformation metody cloudinary_transformation.

některé webové stránky mají grafický design, který je nutí zobrazovat stejné obrázky v mnoha různých rozměrech. Formálně definování více verzí uploader může být hádka. Stále můžete používat CarrierWave a využívat dynamické transformace Cloudinary použitím požadovaných transformací při vytváření vašeho pohledu. Každá verze může být generována dynamicky z vašeho pohledu bez závislosti na verzích CarrierWave. Chcete-li toho dosáhnout, použijte atribut full_public_id s cl_image_tag a vytvořte adresy URL transformace založené na cloudu pro nahrané obrázky připojené k vašemu modelu.

Kopírovat do schránky
cl_image_tag(post.picture.full_public_id, :format => "jpg", :width => 100, :height => 200, :crop => :crop, :x => 20, :y => 30, :radius => 10)

Vlastní koordinovat na bázi oříznutí

Pokud chcete povolit uživatelům ručně vybrat oblast oříznutí, doporučujeme ponechat x,y souřadnice trvale v modelu, aby povolit různé oříznutí na původní obraz v budoucnosti. Následující třída uploader načte vlastní souřadnice z atributů objektu model. Metoda custom_crop v tomto příkladu vrací Hash dalších transformačních parametrů Cloudinary, které se mají použít.

pokud chcete uložit pouze oříznutou verzi obrázku, můžete použít příchozí transformaci. Tímto způsobem není původní obrázek uložen v cloudu; pouze oříznutá verze. Poté můžete použít další transformace pro změnu velikosti oříznutého obrázku. Následující příklad volání process :custom_crop ve třídě sám (namísto v ‚verze‘), zatímco vlastní-souřadnice jsou uloženy jako přechodné atributy na model (definované s attr místo uložení trvale).