Fileserver
Tato služba umožňuje nahrávání a správu souborů (obrázků) na jiném serveru než vám běží RUBY aplikace.
Použití
Zaregistujete se a přidejte novou doménu (nejlépe tak jak se bude jmenovat výsledná stránka na které poběží vaše aplikace)
Install plugin
script/plugin install git://github.com/ondrejbartas/Fileupload.git
Rovnou vám to vypíše hlášku, že se config file nakopíroval, ale má defaultní hodnoty, které vám nebudou fungovat!
Stáhněte si config file a uložte co do app/config/ (jako database.yml etc.)
Přidejte nastavení do vašeho modelu
#pro obrázek - při nahrání nového se starý přepíše
has_uploaded_file :avatar, { :type=> "images",
:templates => {
:small => { :size => "100x100", :resize_mode => "fill" }
}
}
#pro více obrázeků (fotogalerie etc.) - pluralizace :-)
#v té chvíli vám umožní nahrát více jak jeden obrázek
has_uploaded_file :photos, { :type=> "images",
:templates => {
:small => { :size => "100x100", :resize_mode => "fill" }
}
}
#pro datové soubory
has_uploaded_file :datafile, { :type=> "data"}
a pak vytvořte migraci
script/generate fileupload Class avatar (photos datafile ...) rake db:migrate
Vašeho CONTROLLERu se nic nedotkne a ve formulari VIEWS
<% form_for @user, :html => { :multipart => true } do |form| %>
<%= fileuploads_input form, :avatar %>
<% end %>
Ten vám automaticky generuje podle typu (plural, singular), jestli nahráváte jeden či více souborů. Taky vám umožňuje mazání, takže pokud je objekt již vytvořen, zobrazuje vám nahrané soubory - u nich je check_box který po zaškrtnutí a uložení úprav objektu smaže danou položku
Jak se dostat k nahraným datům?
if @user.avatar?
image_tag @user.avatar.get_url
image_tag @user.avatar.thumb_url("small")
image_tag @user.avatar.thumb_url("big")
end
if @user.photos?
@user.photos.each do |photo| %>
image_tag photo.thumb_url("small")
end
end
if @user.datafile?
link_to @user.avatar.get_url
end
Co se dá všechno nastavit v šablonách
has_uploaded_file :photos,
{ :type=> "images", #typ zda-li ["data", "images"]
:rename => true, #prejmenovani true - prejmenovava prijate soubory dle :base_filename
:base_filename => "ahoj", #jak se mají jmenovat soubory "ahoj_0001.jpg" etc.
:templates => { #seznam šablon
:maly => { #název šablony
:size => "150x150", #velikost výstupního obrázku
:name_prefix => "maly", #prefix k názvu souboru "ahoj_0001_maly.jpg"
:resize_smaller => true, #pokud je vstupní obrázek menší než šablona, tak zvětší do rozměrů
:resize_mode => "fill" #["fit","fill"]
#fit - obrázek se zmenší tak aby se vešel do rozměrů
#fill - obrázek se zmenší a ořízne tak aby vyplnil celou plochu rozměrů
},
:velky => { #další šablona
:size => "100x200",
:resize_smaller => true,
:resize_mode => "fit"
}
}
}
Pokud zjistíte, že potřebujete změnit vzhled a nastavení šablon
učiňte tak jednoduše ve vašem modelu a pak:
#do promenne CLASS dejte název vašeho modelu #důležité je vyplnit i RAILS_ENV ve kterém reprocess chcete provést rake fileupload:refresh CLASS=User RAILS_ENV=development
a dostanete výpis ID u kterých se reprocess provedl
Pozor: je to náročný process na serveru i klientovy, takže ho dělejte jen v nejnutnějších připadech